Чтобы ответить на ваш вопрос:
- вы хотите использовать
/usr/bin/test
, когда хотите test
что-то, но не в оболочке (например, find ... -exec test ...
)
- вы хотите использовать
(( ))
, когда вы решаете арифметическое выражение, и вы используете bash, потому что (( ))
зависит от bash.
Теперь немного фона:
Команда /usr/bin/test
требуется по стандарту POSIX . POSIX также требует, чтобы [
был определен как псевдоним для test
. Единственная разница между test
и [
состоит в том, что [
требует, чтобы конечный параметр был ]
.
Поскольку test
часто используется в сценариях оболочки, большинство оболочек имеют встроенную версию test
(и [
). Преимущество встроенной версии заключается в том, что она исключает переключение контекста между оболочкой и исполняемым файлом test
.
Я думаю, можно с уверенностью предположить, что в большинстве случаев не имеет значения, используете ли вы систему test
или встроенную оболочку test
(не считая преимуществ встроенной производительности).
(( ))
и [[ ]]
были введены bash (и, возможно, некоторыми другими оболочками) как синтаксический сахар . (( ))
оценивает арифметические выражения, тогда как [[ ]]
оценивает логические выражения. Оба позволяют вам писать выражения в «более естественном синтаксисе».
Решение об использовании [[
или [
зависит от того, хотите ли вы использовать «более естественный синтаксис», и, поскольку sh не поддерживает [[
, хотите ли вы зависеть от bash.
Решение об использовании (( ))
зависит от того, нужны ли вам арифметические выражения, и опять же, поскольку sh не поддерживает (( ))
, хотите ли вы зависеть от bash. POSIX альтернативой (( ))
является $(( ))
. Обратите внимание, что в поведении есть некоторые тонкие различия.
Следующие ссылки объясняют эти темы очень подробно:
Смотри также:
Бонус: Некоторые разработчики Debian однажды спорили, следует ли им использовать систему test
или встроенную оболочку test
, из-за некоторых отличий в реализации встроенной test
. Если вас интересуют подробности различий системы test
и встроенной оболочки test
, тогда вы можете прочитать обсуждение разработчиков Debian здесь: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267142.