Что делает ввод одного восклицательного знака в Bash?

Нет, DNS не предназначен для этого. Однако, если вы тестируете, вы можете использовать / etc / hosts и жестко запрограммировать несколько тестовых доменных имен на определенные IP-адреса, а затем дать каждому пользователю тестовые доменные имена, которые вы хотите, чтобы они использовали.

например. / etc / hosts

IP address1 hosta.test2 
IP address2 hostb.test2

IP address3 hosta.test3
IP address4 hostb.test3

...
20
15.02.2019, 19:20
5 ответов

Одинокий!в начале команды отменяет статус выхода команды или конвейера :, если команда выходит 0,он перевернется в1(отказ ), и если он выйдет не -ноль, он превратит его в0(успешный )выход.

Это использование задокументировано в руководстве Bash:

If the reserved word ‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above.

Команда !без следующей команды отменяет пустую команду, которая ничего не делает и возвращает истину (, эквивалентную команде :). Таким образом, он инвертирует истину в ложь и выходит со статусом 1, но не выдает ошибки.


Существуют и другие варианты использования !в командахtestи [[, где они отменяют условную проверку. Они не связаны с тем, что вы видите. Как в вашем вопросе, так и в этих случаях это не связано с расширением истории, а !отделено от любых других терминов.

53
27.01.2020, 19:43

Один восклицательный знак можно найти в разделе руководства bash 3.2.2 Конвейеры

If the reserved word ‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above.

$ ! true; echo $?
1
$ ! false; echo $?
0

Также раздел 3.2.4.2 Условные конструкции

! expression

True if expression is false.


Также раздел 4.1 Встроенные функции Bourne Shell

! expr

True if expr is false.


Также следует отметить, что !запустит подстановку истории, если за ней не следует :пробел, табуляция, конец строки, '=' или '(' (, когда параметр оболочки extglob включается с помощью встроенной функции shopt ).

13
27.01.2020, 19:43

Поскольку !используется в сравнениях и означает НЕ .

Например:

a=3
b=2

[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"

[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0
0
27.01.2020, 19:43

! за которой следует строка, выполняет самую последнюю предыдущую команду (, все еще находящуюся в командном буфере ), которая началась с данной строки. Может быть, оболочка просто обнаружила, что никакая предыдущая команда не начиналась с .

-3
27.01.2020, 19:43

!встроенный -в команду, инвертирует смысл конвейера.

Другое использование:

#!встроенный -в команду, вызывает указанный интерпретатор для выполнения скрипта.

!указатель события, помечает команду -слово строки как подстановку истории

!=оператор неравенства

$!переменная оболочки, возвращает номер процесса последней фоновой команды.

-2
27.01.2020, 19:43

Теги

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