каково различие между если и [[в ударе?

Нет, установка бита не имела бы никакого эффекта во время начальной загрузки. Во время надлежащей начальной загрузки, все процессы, выполненные как корень. Поскольку демоны порождены, некоторые выполняются как соответствующий пользователь демона, но если Ваш сценарий не называет один из них вместо init сценариев, Вам не нужен бит suid.

4
13.04.2013, 05:19
2 ответа

В оболочке [ псевдоним для тестовой команды. Это - команда. [[ функция некоторых оболочек, которая незначительно отличается. В ударе это - ключевое слово, а не команда, но функционирует как команда.

Можно думать о нем этот путь: Вы работаете [[ и обеспечение вывода "$ (cmd)" как аргументы той команде. if затем проверяет статус возврата [[. Когда никаким операторам не дают [[, -n подразумевается.

   -n string
          True if the length of string is non-zero.

Для Ваших примеров:

if cmd          # check the return status of cmd
if [[ $(cmd) ]] # check if cmd has any output
7
27.01.2020, 20:48
  • 1
    Ваши последние две строки сообщения закрепляют ответ.Спасибо. –  bagavadhar 13.04.2013, 07:02

if expr оператор (без скобок) проверяет статус возврата expr после того, как это оценено как команда удара. На успех это рассматривают как a true значение.

С другой стороны, if [[ expr ]] с двойными квадратными скобками a bash- определенное ключевое слово, которое может обработать его собственный набор опций, такой как -f /path/to/file протестировать на существование файла или даже обработать переменные тесты такой как $a == $b. В этих скобках необходимо явно сказать этому оценивать некоторое выражение, как ряд удара управляет с if [[ $(cmds) ]]. Иначе это будет рассматривать что-либо там как специальное выражение и будет проанализировано по-другому.

Существует также if [ expr ] создайте, который обычно является псевдонимом (или, в некоторых случаях, приблизительная реализация) if test expr. Если test команда имеет опцию в наличии использовать, затем можно также использовать ее между одиночными скобками.

Для большего количества забавы, существует if ((expr)) создайте, который является лучшим, когда контакт с числами, начиная со всего внутри оценен как арифметическое выражение. Это - также ключевое слово, как двойные скобки.

В основном, if expr и if [ expr ] являются портативными (т.е. все оболочки могут обработать их и обработать их в значительной степени тождественно), и if [[ expr ]] и if (( expr )) являются определенными для реализации, т.е. они - ключевые слова, оценка которых зависят высоко от оболочки, в которой Вы используете их (и если Вы не используете что-то как bash, zsh, или ksh, они даже не могли бы существовать).

3
27.01.2020, 20:48
  • 1
    Одна вещь это для замечания этого [[, [, и (( )) может все использоваться за пределами условных выражений (хотя это только имеет смысл для (( ))). –  jordanm 13.04.2013, 05:52
  • 2
    Ну, можно также использовать [[ вне условных выражений для большего количества сжатого синтаксиса, как [[ expr ]] && expr_is_true_cmds || expr_is_false_cmds. Но это не так читаемо, отдел. –  éclairevoyant 13.04.2013, 05:56

Теги

Похожие вопросы