Что означает команда «-ne» в сценарии bash?
Например, что делает следующая строка сценария bash?
[ $RESULT -ne 0 ]
Что означает команда «-ne» в сценарии bash?
Например, что делает следующая строка сценария bash?
[ $RESULT -ne 0 ]
$RESULT
0
17.07.2013 !=
— строковое неравенство. 17.07.2013 ne
в данном контексте означает не равно; ваше выражение является тестом на то, что $RESULT равен или не равен 0. 17.07.2013 [
запускает команду test
. -ne
является аргументом команды test
, а не bash, и вы можете найти его документацию в man test
. 17.07.2013 [ "$RESULT" -ne 0 ]
или, что гораздо лучше, (( RESULT != 0 ))
. (Лучше этого — если вы получаете это от $?
, вы можете просто переходить по статусу выхода команды, которую вы запускаете напрямую, вместо того, чтобы запускать ее, захватывая ее статус выхода в переменную, а затем подставляя эту переменную. значение в команду test
). 17.07.2013 test
и [
являются встроенными командами и задокументированы в руководстве по bash. (Это также внешние команды, описанные на справочной странице test(1)
или, для некоторых систем, в руководстве по coreutils.) 17.07.2013 [
и test
- это встроенные команды Bash, так что это вроде как в Bash. Кроме того, man test
, скорее всего, покажет документацию для отдельной программы test
(т. е. не встроенной), поэтому help test
лучше. 17.07.2013 [[
, а не test
или [
. 17.07.2013 [[
. Он значительно мощнее — поддерживает сопоставление шаблонов в стиле glob и регулярные выражения (с групповым захватом), отключает разделение строк без явного использования кавычек, позволяет использовать круглые скобки для синтаксиса подвыражения, поддерживает &&
и ||
вместо (устаревшего) -a
и -o
аргументов и т. д. 17.07.2013 [
и test
в основном для улучшения переносимости и согласованности (даже перед лицом, скажем, chroot
), а не строго для повышения производительности. 17.07.2013 [[ ]]
. Откровенно говоря, объяснение, которое я даю, больше сосредоточено на том, чтобы вбить людям в голову, что это просто команда, поскольку многие люди ошибочно полагают, что [ ]
является синтаксисом. 17.07.2013 -ne
довольно легко найти на справочной странице bash
. 17.07.2013 Это одна из тех вещей, которые может быть трудно найти, если вы еще не знаете, где искать.
[
на самом деле является командой, а не частью синтаксиса оболочки bash, как можно было ожидать. Это встроенная команда Bash, поэтому она задокументирована в руководстве Bash.
Есть также внешняя команда, которая делает то же самое; во многих системах он предоставляется пакетом GNU Coreutils.
[
эквивалентна команде test
, за исключением того, что [
требует ]
в качестве последнего аргумента, а test
— нет.
Предполагая, что в вашей системе установлена документация bash, если вы наберете info bash
и выполните поиск 'test'
или '['
(апострофы являются частью поиска), вы найдете документацию для команды [
, также известной как команда test
. Если вы используете man bash
вместо info bash
, ищите ^ *test
(слово test
в начале строки после некоторого количества пробелов).
После ссылки на «Условные выражения Bash» вы найдете описание -ne
, оператора числового неравенства («ne» означает «не равно»). Напротив, !=
— это строковое неравенство. оператор.
Вы также можете найти документацию по bash в Интернете.
test
и [
)-ne
находится под "arg1 OP arg2")test
официальное определение команды test
— это стандарт POSIX (которому реализация bash должна достаточно хорошо соответствовать, возможно, с некоторыми расширениями).
"не равно" Итак, в этом случае проверяется, что $RESULT
не равно нулю.
Однако тест выполняется числово, а не по алфавиту:
n1 -ne n2 True if the integers n1 and n2 are not algebraically equal.
в сравнении с:
s1 != s2 True if the strings s1 and s2 are not identical.
test
это, в конце концов, команда POSIX. 17.07.2013