Shell
test 或 [ 或 [[ 在 bash shell 和其他 shell 之間是否更便攜?
我知道我能做到
$ [ -w /home/durrantm ] && echo "writable" writable
或者
$ test -w /home/durrantm && echo "writable" writable
或者
$ [[ -w /home/durrantm ]] && echo "writable" writable
我喜歡使用第三種語法。它們在所有方面以及所有負面和邊緣情況下都等效嗎?可移植性是否有任何差異,例如 Ubuntu 和 OS X 上的 bash 或舊/新 bash 版本之間,例如在 4.0 之前/之後,它們是否都以相同的方式擴展表達式?
[
是test
命令的同義詞,它同時是bash 內置命令和單獨命令。But[[
是一個bash 關鍵字,僅在某些版本中有效。因此,出於便攜性的原因,您最好使用單個[]
或test
[ -w "/home/durrantm" ] && echo "writable"
是的,有區別。最便攜的是
test
或[ ]
。這些都是POSIXtest
規範的一部分。該
if ... fi
構造也由 POSIX 定義,應該是完全可移植的。該
[[ ]]
功能ksh
也存在於bash
(所有現代版本)的某些版本中zsh
,可能存在於其他版本中,但不存在於sh
ordash
或其他各種更簡單的 shell 中。因此,要使您的腳本可移植,
[ ]
請test
使用if ... fi
.