Можно ли использовать псевдонимы в Zsh?
Чтение Какая разница между встроенной оболочкой и ключевым словом оболочки? Я задавался вопросом, сколько я мог псевдоним вещи в оболочке.
Так, например, вместо того, чтобы писать
string_with_spaces='some spaces here'
if [ -n $string_with_spaces ]; then
echo "The string is non-empty"
fi
Задача состоит в том, чтобы написать что-то вроде
signvico='iuj spacetoj tie ĉi'
se ja nevakua $signvico plie vera ope nu tiam
echo "la signvico ne estas vakua!"
eme
Я попробовал это
alias se='if'
alias tiam='then'
alias eme='fi'
alias ja='['
alias ope=']'
alias nevakua='-n'
alias vera='true'
alias plie='-a'
alias nu=';'
alias eĥu='echo'
Но это не сработает. Действительно, используя -a
, -n
, ;
а также ]
псевдонимы приведут к сбою сценария. С помощью se ja -n $signvico -a vera ] ; tiam
с остальным приведенным выше кодом будет работать, однако. Я думаю, это все из-за того, что соответствующий код анализируется / подставляется на другом уровне конвейера интерпретатора.
Но есть ли способ сделать весь код выше, как ожидалось?
1 ответ
Ответ да, это возможно в Zsh, просто используйте -g
флаг. Так, например:
# utilitarian commands/builtins
alias eĥu='echo'
alias surogu='sed'
# control structure
alias se='if'
alias else='fi' # overriding `else` is not a problem it seems :)
alias tiam='then'
alias ja='['
alias -g ope=']'
# `test` flags
alias -g plie='-a'
alias -g nevakua='-n'
# sed flags
alias -g ige='-e'
# statement combinators
alias -g nu=';'
alias -g kaj='&&'
alias -g aŭ='||'
alias -g ke='|'
signvico='iuj spacetoj spaces tie ĉi'
se ja nevakua $signvico plie vera ope nu tiam
eĥu "la signvico ne estas vakua!"
else # literally "out of if"
# echo 'word' | sed -e 's/word/vorto/'
eĥu 'word' ke surogu ige 's/word/vorto/'
Zsh также включает -m
флаг для соответствия шаблонам. Это может быть полезно для захвата обеих конструкций, таких как [[
в if [[ -n 'string' ]] …
и флаги для конкретной команды. Последнее особенно интересно, поскольку его расширение может быстро перерасти в ограничение повторного использования общего словаря, относящегося к разному. флаги в зависимости от команды.