Bash 通过变量传递命令行参数
我试图通过添加带有“外部世界”(即用户输入)信息的参数来构造命令行 假设我想为用户给我的一组单词创建一个grep文件(这只是为了向您展示用例,我确实在尝试运行一个生物信息学代码,但每个人都有Bash 通过变量传递命令行参数,bash,Bash,我试图通过添加带有“外部世界”(即用户输入)信息的参数来构造命令行 假设我想为用户给我的一组单词创建一个grep文件(这只是为了向您展示用例,我确实在尝试运行一个生物信息学代码,但每个人都有grep,用于测试目的)。我的想法是在bash数组中有一个单词列表: $ L=("foo" "bar") 我想用这个列表得到一行,相当于 $ grep -e foo -e bar input.txt 我使用了一种生成needes参数字符串的方法 $ P=${L[@]/#/-e } $ echo "$P"
grep
,用于测试目的)。我的想法是在bash数组中有一个单词列表:
$ L=("foo" "bar")
我想用这个列表得到一行,相当于
$ grep -e foo -e bar input.txt
我使用了一种生成needes参数字符串的方法
$ P=${L[@]/#/-e }
$ echo "$P"
-e foo -e bar
但我不能按原样使用它(假设文件包含foo和bar):
$grep“$P”input.txt
最后一个命令,实际搜索字符串“-e foo-e bar”
如果我在没有引号的情况下运行该命令,它会工作,但它也会触发shellcheck.net中的SC2086警告,我正试图避免这种情况
我已经尝试了数组、括号、引号的几种组合。。。但我无法根据自己的需要确定确切的语法。有人有这种语法吗?如果引用参数字符串,它将被解释为一个长参数。如果你不引用它,那么你就依赖于分词,这有很多警告,不推荐使用 您可以构建如下参数:
arg=()
arr=(foo bar)
for a in "${arr[@]}"; do arg+=(-e "$a"); done
grep "${arg[@]}" input
如果引用参数字符串,它将被解释为一个长参数。如果你不引用它,那么你就依赖于分词,这有很多警告,不推荐使用 您可以构建如下参数:
arg=()
arr=(foo bar)
for a in "${arr[@]}"; do arg+=(-e "$a"); done
grep "${arg[@]}" input