我有一个带有3个参数的shell脚本(run.sh):
#!/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命令的变量按原样处理,并且它没有被“解释”为它包含的内容。
答案 0 :(得分:-1)
shell用换行符替换所有\ n字符。因此,您的模式不起作用。
如果要匹配文字反斜杠,后跟字母n,则需要编写\\n
。
更新:这适用于zsh,但不适用于bash。