Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用shell脚本参数作为对程序的脚本内调用的输入_Bash_Shell_Parameters_Command - Fatal编程技术网

Bash 使用shell脚本参数作为对程序的脚本内调用的输入

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 但它似乎没有将我的参数

我有一个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
但它似乎没有将我的参数作为命令的参数进行求值,以在线交换变量


我对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之前检查一下。。。我想他们也会这么做。我会更新我的评论。