Shell

test 或 [ 或 [[ 在 bash shell 和其他 shell 之間是否更便攜?

  • July 26, 2019

我知道我能做到

$ [ -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,可能存在於其他版本中,但不存在於shordash或其他各種更簡單的 shell 中。

因此,要使您的腳本可移植,[ ]test使用if ... fi.

引用自:https://unix.stackexchange.com/questions/168255