更新:
的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