Bash 使用shell脚本参数作为对程序的脚本内调用的输入
我有一个shell脚本(run.sh),它包含3个参数:Bash 使用shell脚本参数作为对程序的脚本内调用的输入,bash,shell,parameters,command,Bash,Shell,Parameters,Command,我有一个shell脚本(run.sh),它包含3个参数: #!/bin/bash VAR1=$1 VAR2=$2 VAR3=$3 grep -Pzl "$VAR1(\n|.)*$VAR2(\n|.)*$VAR3" * | xargs -L1 cat 脚本应获取参数1、2、3并将其传递给grep,以使其像以下那样运行脚本: ./run.sh a b c 我希望它被解释为 grep -Pzl "A(\n|.)*B(\n|.)*C" * | xargs -L1 cat 但它似乎没有将我的参数
#!/bin/bash
VAR1=$1
VAR2=$2
VAR3=$3
grep -Pzl "$VAR1(\n|.)*$VAR2(\n|.)*$VAR3" * | xargs -L1 cat
脚本应获取参数1、2、3并将其传递给grep,以使其像以下那样运行脚本:
./run.sh a b c
我希望它被解释为
grep -Pzl "A(\n|.)*B(\n|.)*C" * | xargs -L1 cat
但它似乎没有将我的参数作为命令的参数进行求值,以在线交换变量
我对grep条件没有问题,但是grep命令的变量按原样处理,并且它没有被“解释”为它所包含的内容。shell用换行符替换所有\n字符。因此,您的模式不起作用 如果要匹配文字反斜杠,后跟字母n,则需要写入
\\n
更新:这适用于zsh,但不适用于bash。您正在传递小写字母
abc
,但您想要的结果包含大写字母。更改参数的大小写是否有帮助?如果您不关心大小写,可以使用-i grep选项“未计算我的参数”以bash-x Run.sh a b c
的形式运行脚本,它将在展开后显示grep
命令。@cdarke感谢您的建议,但我所说的“不计算我的参数”是什么意思也就是说,我希望在shell脚本运行时,命令将按原样执行,这意味着$VAR1不会被替换为“a”行内。您所说的“in-line”是什么意思?“shell将所有\n字符替换为换行符”不在我的版本中<代码>回显“\nhello\n”给出\nhello\n
。您需要echo$'\nhello\n'
来获取要插值的shell(或者在本例中是echo-e
)。哎呀,只有zsh在这样做。我应该在bash之前检查一下。。。我想他们也会这么做。我会更新我的评论。