result is true. But I don't understand why since bash will translate $anything to an empty string, shouldn't this will result in syntax error ?
Близко, но нет печенья. Есть выражение:
$anything
.if ; then
является ошибкой, потому что bash не может проанализировать его (, следовательно,:синтаксис ошибка ). Он ожидает там список команд и вместо этого получает;
. Синтаксический анализ происходит задолго до расширения переменных, поэтомуif $anything; then
анализируется нормально. Что произойдет дальше?$anything
расширяется, выполняется разделение полей и т. д. Это оставляет пустой список команд, что тривиально верно. Сравните:if "$anything"; then echo foo; fi if $anything; then echo foo; fi
"$anything";
не является пустым списком команд, у него есть команда, которая происходит с пустой строкой, так же, как и сif '';
. Но"$anything"
без кавычек превращается в ничто.То же самое было бы верно, если бы
$anything
содержал только пробельные символы, присутствующие вIFS
,или содержал разделенный$IFS
-список глобусов, которые не соответствовали ни одному файлу, и была включена опцияnullglob
.
Как пользователь root, я создал файл
vi /etc/sudoers.d/peter
и добавлено
peter ALL=(ALL:ALL) ALL
Теперь я могу использовать sudo из учетной записи Peter.