更新:
的OP显然使用zsh
,但加了标签的问题仅统称为shell
(暗示POSIX兼容性)。
什么可能发生的情况是,他/她尝试运行使用不同外壳上面zsh
特异性代码,导致bad substitution
错误 - bash
会给该错误,例如。
当zsh
运行,上面的代码不工作 - 它使用zsh
的字符串分割标志=
到$STR
内容分解成单个的单词 - 但它并不能概括得好:如果搜索字符串嵌入了 例如,空间解决方案会中断。
下面是一个更强大的解决方案在zsh
,以及工作在bash
,加上POSIX兼容的外壳的解决方案。
假设你正在使用bash的或的zsh :
使用阵列建立你的参数列表,然后传递整个数组双引号来fgrep
:
STR=('-e' 'hi')
STR+=('-e' 'bye')
printf 'nihibyehi\nhello\nhi\n' | fgrep "${STR[@]}"
对于POSIX兼容的外壳(如果使用bash
或zsh
是不是一种选择),您可以编写搜索字符串的(临时)文件,并使用-f
选项将它传递给fgrep
:
echo 'hi' > STRs.txt
echo 'bye' >> STRs.txt
printf 'nihibyehi\nhello\nhi\n' | fgrep -f STRs.txt
你为什么做'$ {= STR}'?为什么不只是'$ {STR}'? – larsks
根据下面的评论,它看起来像唯一的问题是,你正在试图用_wrong shell_运行你的 - valid - 'zsh'代码。请确认。 – mklement0
是的,这是问题所在。非常感谢! – user1145925