Я вижу, что у вас уже есть ответ, но я вижу, что между пользователями существуют разногласия, что эта карта не поддерживается. Вот доказательство того, что у меня для некоторых пользователей, что карта действительно работает.
Но это не доказательство того, что он будет работать во всех отношениях. Это доказывает, что он МОЖЕТ работать больше всего на свете. У меня тоже не было проблем с этим.
Вы можете попробовать разницу для себя:
ls / invalid / path & amp; & amp; & amp; & amp; echo «hello!»
, поскольку / invalid / path не существует, ls не может показать вам список каталогов. Он выйдет из строя с сообщением об ошибке: «ls: / invalid / path: Нет такого файла или каталога». Вторая половина команды (echo «hello!») Никогда не выполняется, потому что первая половина не удалась. ls / invalid / path; echo "hello!"
Такое же сообщение об ошибке появляется, как и раньше, но на этот раз выполняется вторая часть! ls: / invalid / path: Нет такого файла или каталога привет! Почему это полезно? Предположим, вы хотите извлечь файл с именем archive.tar.gz. Вы можете использовать команду tar zxvf archive.tar.gz & amp; & amp; & amp; rm archive.tar.gz
. Если по какой-либо причине извлечение архива не выполняется, вторая часть не выполняется! Вы можете попробовать еще раз.
Если вы используете; в той же ситуации архив удаляется, и вы не можете повторить попытку.
& amp;
- AND
, что означает, что вторая команда будет выполняться только в том случае, если первая вернулась (без ошибок).
AND
второй параметр становится неактуальным, если первый равен false
, и поэтому базовый код оптимизируется для отсрочки оценка второго параметра, пока он не знает, что такое первый.
– Ward Muylaert
11 February 2011 в 19:20
& amp; & amp;
является просто бинарным оператором, функцией. Единственный "специальный" дело в том, что это нотация infix (что стандартно для большинства этих операторов), и отсроченное выполнение второго операнда. Это отсроченное выполнение действительно дает ему возможность быть использованным как что-то, что можно концептуально рассматривать как оператор if
в этом контексте i>, но это не отвлекает от факта что изначально предполагаемое использование внутри i> является условным для фактического оператора if
. Использование здесь действительно является скорее «взломом».
– Ward Muylaert
12 February 2011 в 02:34
a & amp; & amp; b || c = (a & amp; b) || с
. Простой порядок оценки. Там нет никакой тайны. Если вы напишете их как свои типичные функции, это будет выглядеть как или (и (a, b), c)
. Эта логика одинакова в пределах , если
условна, а также при вводе ее прямо в командную строку, потому что & amp;
и ||
являются operator i>, они берут два операнда и возвращают другое.
– Ward Muylaert
12 February 2011 в 15:30
try
false && echo "hello"
и
false; echo "hello"
видеть разницу
Команда (функция, в случае скрипта) после & amp; & amp;
выполняется в зависимости от RETVAL первой команды (функция, в случае скрипта). Это приводит к тому, что первая команда вернет значение 0, если оно будет успешным. Мы можем проверить возвращаемое значение для выполнения дальнейших команд.
Обновление: я добавил как скрипт, чтобы увидеть некоторые из возможных ловушек:
Поскольку никто не упомянул «||», я
Update2: некоторые важная переформулировка здесь & amp; & amp; как «то» выражения «if», которое отвечает «true»
|| НЕ нравится «else» в статусе «если» .. || как «then» выражения «if», которое отвечает на «false»
Более конкретно, & amp; & amp; тестирует $? возвращаемое значение предыдущего последнего выполненного оператора и передает управление оператору или подчиненной оболочке сразу после & amp; & amp; ... он передает только управление, если $? правда.
|| аналогичен, и его часто видно после & amp; & amp; , но он проверяет ложное возвращаемое значение ($?) из предыдущего последнего выполненного оператора ... NB !, Nota Bene! Заметьте, хорошо! .... если инструкция preecing является & amp; & amp; оператор, который возвращает false, когда вы ожидаете, что он будет истинным, тогда || ответит на ложь, поэтому смешение на одной строке может быть рискованным
. Основная мысль, которую я пытаюсь сделать, связана с ошибкой, которую я сделал. т.е.: ## [[condition]] & amp; & amp; & amp; A || B не ведет себя как троичный стиль C / C ++. т.е.: // (условие)? A: B См. Приведенный ниже сценарий для примеров «неожиданных» результатов от «A»
. Основной тест и & amp; & amp; & amp; и || оператор должен быть в одной строке ...
Запустите этот скрипт, чтобы увидеть, что может случиться с ошибками при использовании & amp; & amp; & amp; и || Последняя выполненная инструкция может быть не той, которую вы ожидаете ..
[[condition]] & amp; & amp; & amp; & amp; & amp; echo Hello || эхо До свидания .... обычно безопасно, потому что хорошо сформированное эхо вернется. но как насчет доступа к файлу, который не выходит?
#! / bin / bash # # ", как и ожидалось," коды возврата "означает: ожидается, что он будет вести себя как нормальный И / ИЛИ-тест #, если [[" $ 1 "! =" "] ], затем выйдите из рекурсивного вызова $ 1; fi #, чтобы вернуть двоичное значение $ (значение десятичного) echo echo 'test 1: все коды возврата «как ожидалось»' echo ====== ((1 == 1)) & amp; echo "((1 == 1)) rc = $? .. & amp; & amp; .. условие истинно "|| echo" ((1 == 1)) rc = $? .. || .. условие ложно "$ 0 0 & amp; echo" \ $ 0 0 rc = $? .. & amp; & ... условие истинно "|| echo" \ $ 0 0 rc = $? .. || .. условие ложно "((1! = 1)) & amp; echo" ((1! = 1)) rc = $? ... & amp; ... условие истинно "|| echo" ((1! = 1)) rc = $? .. || .. условие ложно "$ 0 1 & amp; & amcho; echo" \ $ 0 1 rc = $? .. & amp; & amp; ... условие истинно "|| echo" \ $ 0 1 rc = $? .. || .. условие является ложным «echo echo» test 2: теперь введите некоторые «неожиданные» ошибки в первую из пары & amp; & amp; / || pair echo ====== ((1 == 1)) & amp; & amp; (echo "((1 == 1)) rc = $? .. & amp; & amp; ... условие истинно", $ 0 1) || echo "((1 == 1)) гс = $? .. || .. условие ложно "$ 0 0 & amp; & amp; (echo" \ $ 0 0 rc = $? .. & amp; & amp; .. условие истинно ", $ 0 2) || echo" \ $ 0 0 rc = $? ... || .. условие ложно "((1! = 1)) & amp; & amp; (echo" ((1! = 1)) rc = $? .. & amp; & amp; ... условие истинно "; $ 0 3) || echo "((1! = 1)) rc = $? .. || .. условие ложно "$ 0 1 & amp; & amp; (echo" \ $ 0 1 rc = $? .. & amp; & amp; .. условие истинно ", $ 0 4) || echo" \ $ 0 1 rc = $? .. || .. условие является ложным «echo echo» test 3: Теперь замените порядок операторов & amp; & amp; и ||, используя «как ожидалось» эхо-коды возврата ====== ((1 ==) 1)) || echo "((1 == 1)) rc = $? .. || .. условие истинно "& amp; & amp; echo" ((1 == 1)) rc = $? .. & amp; & amp; .. условие ложно "$ 0 0 || echo" \ $ 0 0 rc = $? .. || .. условие истинно "& amp; & amcho; echo" \ $ 0 0 rc = $? .. & amp; & amp; .. условие является ложным "((1! = 1)) || echo" ((1! = 1)) rc = $? .. || .. условие истинно "& amp; & amp; echo" ((1! = 1)) rc = $? .. & amp; & amp; .. условие ложно "$ 0 1 || echo" \ $ 0 1 rc = $? .. || .. условие истинно "& amp; & amcho; echo" \ $ 0 1 rc = $? .. & amp; & amp; .. Условие является ложным «echo echo» test 4: Когда порядок операторов & amp; & amp; и || все еще заменен, вводят «неожиданные» ошибки в первую из & amp; / || pair 'echo ====== ((1 == 1)) & amp; & amp; (echo "((1 == 1)) rc = $? .. & amp; & amp; .. условие истинно"; $ 0 1) || echo "((1 == 1)) rc = $? .. || .. условие ложно "$ 0 0 & amp; & amp; (echo" \ $ 0 0 rc = $? .. & amp; & amp; .. условие истинно ", $ 0 2) || echo" \ $ 0 0 rc = $? ... || .. условие ложно "((1! = 1)) & amp; & amp; (echo" ((1! = 1)) rc = $? .. & amp; & amp; ... условие истинно "; $ 0 3) || echo "((1! = 1)) rc = $? .. || .. условие ложно "$ 0 1 & amp; & amp; (echo" \ $ 0 1 rc = $? .. & amp; & amp; .. условие истинно ", $ 0 4) || echo" \ $ 0 1 rc = $? .. || .. условие ложно "exit
Вы можете попробовать разницу для себя:
ls / invalid / path & amp; & amp; & amp; & amp; echo «hello!»
, поскольку / invalid / path не существует, ls не может показать вам список каталогов. Он выйдет из строя с сообщением об ошибке: «ls: / invalid / path: Нет такого файла или каталога». Вторая половина команды (echo «hello!») Никогда не выполняется, потому что первая половина не удалась. ls / invalid / path; echo "hello!"
Такое же сообщение об ошибке появляется, как и раньше, но на этот раз выполняется вторая часть! ls: / invalid / path: Нет такого файла или каталога привет! Почему это полезно? Предположим, вы хотите извлечь файл с именем archive.tar.gz. Вы можете использовать команду tar zxvf archive.tar.gz & amp; & amp; & amp; rm archive.tar.gz
. Если по какой-либо причине извлечение архива не выполняется, вторая часть не выполняется! Вы можете попробовать еще раз.
Если вы используете; в той же ситуации архив удаляется, и вы не можете повторить попытку.