%20!%3D%20(%20%D1%82%D0%B5%D1%81%D1%82%20-z%20%24st%20)%20%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%3F.png)
Пока я читал,
test -n $string
==> Статус выхода равен 0, если $string
естьне ноль, 1 в противном случае
и
test -z $string
==> Статус выхода равен 0, если$string
нулевой, 1 в противном случае
Но в этом конкретном примере (я пытался создать пустую строку) похоже, я что-то упускаю.
#!/bin/sh
str=""
test -n $str
echo $?
test -z $str
echo $?
Вывод этого таков:
0
0
Может ли кто-нибудь дать объяснение этому странному поведению?
решение1
Поставьте $str
двойные кавычки!
Тест -n требует, чтобы строка была заключена в кавычки внутри тестовых скобок. Использование строки без кавычек с ! -z или даже просто строки без кавычек внутри тестовых скобок (см. пример 7-6) обычно работает, однако это небезопасная практика. Всегда заключайте в кавычки проверяемую строку.Другие операторы сравнения