Что происходит при rsync без пути назначения? [дубликат]

Переменные не обязательно заключать в двойные кавычки в [[ ]], но они должны быть заключены в кавычки для [ ].

Без кавычек, если $value - пустая строка, то [ -n $value ] - это то же самое, что [ "-n" ]. "-n" является строковым тестом и оценивается как непустая, а значит истинная, поэтому тест проходит успешно.

(почему? потому что -n STRING и STRING одинаковы для [ aka test - они оба являются тестом на string-is-not-empty)

Дальнейшие эксперименты показывают, что это похоже на случай всех однооперационных тестов, включая файловые операторы - если операнд отсутствует, [ ] рассматривает единственный аргумент как строковый тест. Это можно было бы считать ошибкой и исправить, если бы это не было историческим фактом, на который сценаристы полагались десятилетиями - и изменение этого факта привело бы к поломке бесчисленного количества существующих сценариев.

С кавычками, [ -n "$value" ] точно такое же, как [ -n "" ], поэтому тест не проходит.

[[ ... ]] гораздо более щадяще относится к цитированию переменных - цитирование необязательно, и тест работает одинаково как с кавычками, так и без них.

5
07.02.2019, 23:49
1 ответ

Теперь в вашем рабочем каталоге есть файл с именем "user@host". Если бы вы скопировали его в удаленное место без указания пути,user@host:(двоеточие примечания )назвало бы его file.txtв любом расположении по умолчанию на этом сервере (, вероятно, userв домашнем каталоге ). ].

14
27.01.2020, 20:32

Теги

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