我正在嘗試在 shell bash 中使用過濾器列出檔案。
這個例子有效:
result=$(ls *{A1,A2}*.txt)
echo $result
file1_A1.txt,file2_A2.txt
但是當將過濾器放入變數時,它不起作用:
filter={A1,A2}
result=$(ls *"$filter"*.txt)
echo $result
ls: 無法訪問“ {A1,A2} ”: 沒有這樣的檔案或目錄
我使用了錯誤的語法。我該如何解決?
最好的事物
uj5u.com熱心網友回復:
使用擴展通配符:
shopt -s extglob
filter="A1|A2"
result=(*@($filter)*.txt)
echo "${result[@]}"
uj5u.com熱心網友回復:
你可以eval用來實作你想要的(雖然我不是它的忠實粉絲;eval應該盡可能避免 IMO):
filter="{A1,A2}"
result=$(eval "ls *$filter*.txt")
echo "$result"
沒有其他方法可以在任何其他擴展(例如變數擴展)之前完成大括號擴展。請參閱man bash、部分EXPANSION和Brace Expansion。
但是,此答案中提供了一種可能的解決方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320747.html
