Shell-Script
查找具有多個模式的命令不返回任何輸出
#!/bin/bash pat="'*.ab' -o -name '*.bc'" open="\(" close="\)" path=path find $path -type f $open -name $pat $close
上面的程式碼沒有顯示任何查找輸出。幫忙
pat="'*.ab' -o -name '*.bc'" find $path -type f $open -name $pat $close
這不符合您的要求:變數
pat
中的引號不被視為引號,而是作為文字字元。展開之後$pat
,它是 wordsplit,導致單詞'*.ab'
,和-o
,單引號仍然完好無損。因此,除非您的文件名中包含單引號,否則這將不匹配。-name``'*.bc'
path=path
這會將變數
path
設置為文字 stringpath
,但我想這只是一個佔位符。open="\(" close="\)"
這些將文字反斜杠放在變數中,並且
find
可能應該在它得到一個參數時抱怨\(
. 引用括號一次就足夠了,所以要麼open="("
或open=\(
如果您需要為 建構表達式列表
find
,請使用帶有數組的 shell(Bash 或除了普通的幾乎任何東西sh
):args=() args+=( -name "*.ab" ) args+=( -or -name "*.bc" ) find ... \( "${args[@]}" \)
根據需要將數組建構包裹在一個循環中。