( тест -n $st ) != ( тест -z $st ) верно?

( тест -n $st ) != ( тест -z $st ) верно?

Пока я читал,

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) обычно работает, однако это небезопасная практика. Всегда заключайте в кавычки проверяемую строку.Другие операторы сравнения

Связанный контент