2017-08-31 54 views
0

我有一個文件$ HOME /富/ foo.movglob在Bash中與[[]] vs []有什麼不同?

if [[ -f $HOME/**/*.mov ]]; then 
    echo "file is there" else 
    echo "file is not there" 
fi 

回聲 「文件不存在」。然而,

if [ -f $HOME/**/*.mov ]]; then 
    echo "file is there" else 
    echo "file is not there" 
fi 

回聲 「文件中有」。

爲什麼[[]]和[]之間的區別?

+1

相關:https://unix.stackexchange.com/questions/306111/confused-about-operators-vs-vs-vs –

+0

shellcheck告訴我[-f]不能與globs一起使用。真的嗎? – Bleakley

+1

@Bleakley我懷疑是這樣的,glob在執行命令前展開了,所以如果有多個事情與glob相匹配,那麼'''f'會有太多參數,如果'nullglob'啓用了'如果glob不匹配任何東西,那麼d太少了。你想知道是否有任何文件,就是這樣嗎? –

回答

2

[命令的參數受擴展路徑名的限制;在[[ ... ]]中使用的詞語不是。

如果你得到file is there,我懷疑你完全有一個文件匹配的模式。否則,對於-f,您將有太多參數,或者該模式將被視爲不命名現有文件的文字字符串。

相關問題