我想使用通配符檢查Bash腳本中是否存在一個或多個目錄。Bash Shell腳本:確認一個或多個目錄的存在
我試過這個;
if [ -d app/*management ]
then
for mscript in `ls -d app/*management`
do
...
done
fi
如果只有一個匹配,但是會拋出錯誤「二元運算符預期」,那麼該函數有效。
任何建議一個好辦法做到這一點?
我想使用通配符檢查Bash腳本中是否存在一個或多個目錄。Bash Shell腳本:確認一個或多個目錄的存在
我試過這個;
if [ -d app/*management ]
then
for mscript in `ls -d app/*management`
do
...
done
fi
如果只有一個匹配,但是會拋出錯誤「二元運算符預期」,那麼該函數有效。
任何建議一個好辦法做到這一點?
您不能使用-d在同一時間檢查多個目錄,而在你的表情& &(和)。我會用這個:
for dir in app/*management; do
if [[ -d $dir ]]; then
...
fi
done
你應該使用globs而不是解析ls的輸出。請參閱以下鏈接瞭解更多信息:http://mywiki.wooledge.org/ParsingLs
你爲什麼不去做這樣的:
for mscript in app/*management ; do
if [ -d "$myscript" ] ; then
...
fi
done
水珠擴展到管理目錄的列表之後,if
語句看起來像
if [ -d app/1management app/2management ]
由於-d
只有一個參數,bash將不知道該怎麼用剩下的目錄來做。爲了打擊,它看起來像你忘了包含一個二元運算符。
你可以做只是做到以下幾點:
for mscript in app/*management; do
if [ ! -d $mscript ]; then
continue
fi
...
done
編輯:由於jordanm評論,下面可能是沒有必要的,但我會離開這裏作爲參考,nullglob
是很好的瞭解。
一個警告。如果app/*管理有可能無法擴展爲任何內容,則需要在循環之前設置shell選項nullglob
,否則「app/* management」將被視爲文字字符串,而不是shell外殼。
if ! shopt nullglob; then
setting_nullglob=1
shopt -qs nullglob
fi
for mscript in app/*management; do
...
done
if [ ${setting_nullglob:-0} = 1 ]; then
unset setting_nullglob
shopt -qu nullglob
fi
你應該在報價,謝謝'['或'使用[' – jordanm
Ninja'd內的擴張。 – Mat