Zsh - Как я могу сравнить переменную, имя которой начинается с символа '~', с оператором 'if'? - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы автоматизировать установку и настройку zsh, и в настоящее время я не могу проверить, существует ли файл, имя которого начинается с '~' и не является пустым.

zsh_rcfile='~/.zshrc'
set -- $zsh_rcfile
if [ -s "${zsh_rcfile}" ]; then
    printf "Zsh is already configured."
fi

Когда Я выполняю сценарий в терминале, ошибка не возвращается, но вывод также не производится. Я пытался жестко закодировать путь или использовать его без фигурных скобок, но результат тот же. Я также пытался не использовать команду set (которая предотвращает неприятные сюрпризы с пустыми именами или именами, начинающимися с da sh).

Оператор 'if' будет работать без символа тильды ( т. е. ~), но это могло бы послужить причиной неполноценного решения, поскольку мне нужно было автоматизировать другие процессы, необходимые для пересечения дерева систем (а не только раздела "home").

Кто-нибудь согласен мне помочь? выполнение сравнения с путем, начинающимся с '~'?

Примечание: я использую zsh 5.7.1 (x86_64-debian- linux -gnu).

1 Ответ

0 голосов
/ 02 апреля 2020

Расширение тильды не выполняется в результате расширения параметра. Вы хотите оставить ~ без кавычек, чтобы он был раскрыт, когда вы определяете параметр.

% zsh_rcfile='~/.zshrc'
% print $zsh_rcfile
~/.zshrc
% zsh_rcfile=~/.zshrc
% print $zsh_rcfile
/Users/<user>/.zshrc

Оператор -s возвращает false, если Файл не существует в первую очередь (что имеет смысл, поскольку несуществующий файл тривиально пуст).

 -s file
              true if file exists and has size greater than zero.
...