0
我有目錄a1..a5,b1..b5和c1..c5。在每個目錄中,我有兩個文件a1,b1和c1。兩次bash命令替換
do mkdir /tmp/{a,b}$d; touch /tmp/{a,b,c}$d/{a,b,c}1; done;
我想獲得以'a'開頭的所有以'a'或'b'開頭的文件。我可以做到這一點:
DIRS=`ls -1 -d /tmp/{a,b}*/a*`
echo ${DIRS}
,並獲得:
/tmp/a1/a1 /tmp/a2/a1 /tmp/a3/a1 /tmp/a4/a1 /tmp/a5/a1 /tmp/b1/a1 /tmp/b2/a1 /tmp/b3/a1 /tmp/b4/a1 /tmp/b5/a1
現在,我將使用一個稱爲數據變量存儲目錄,後來得到的文件:
DATA="/tmp/{a,b}*"
echo ${DATA}
DIRS=`ls -1 -d ${DATA}/a*`
echo ${DIRS}
在數據內容正常(/tmp/{a,b} *),但收到以下錯誤:
ls: cannot access /tmp/{a,b}*/a*: No such file or directory
任何想法爲什麼發生這種情況?
這是因爲水珠和括號擴展不會在雙引號或字符串賦值發生,而水珠擴張並分詞後發生。這意味着,如果你做'echo什麼'vs'var = something; echo $ var',兩者最終都會擴大球圈,但只有前者纔會擴大花括號。 –
謝謝!!! @thatotherguy –