2016-07-27 132 views
0

我有目錄a1..a5b1..b5c1..c5。在每個目錄中,我有兩個文件a1,b1c1兩次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

任何想法爲什麼發生這種情況?

回答

1

我解決了這個問題,但是我找不到任何有關我以前的嘗試失敗的原因。

DATA="/tmp/{a,b}*" 
echo ${DATA} 
DIRS=`eval "ls -1 -d ${DATA}/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

+1

這是因爲水珠和括號擴展不會在雙引號或字符串賦值發生,而水珠擴張並分詞後發生。這意味着,如果你做'echo什麼'vs'var = something; echo $ var',兩者最終都會擴大球圈,但只有前者纔會擴大花括號。 –

+0

謝謝!!! @thatotherguy –