Shell-Script

查找具有多個模式的命令不返回任何輸出

  • June 20, 2017
#!/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設置為文字 string path,但我想這只是一個佔位符。

open="\("
close="\)"

這些將文字反斜杠放在變數中,並且find可能應該在它得到一個參數時抱怨\(. 引用括號一次就足夠了,所以要麼open="("open=\(

如果您需要為 建構表達式列表find,請使用帶有數組的 shell(Bash 或除了普通的幾乎任何東西sh):

args=()  
args+=( -name "*.ab" )
args+=( -or -name "*.bc" ) 

find ... \( "${args[@]}" \)

根據需要將數組建構包裹在一個循環中。

引用自:https://unix.stackexchange.com/questions/371932