阅读What's the difference between shell builtin and shell keyword?我想知道我能在shell中添加多少别名。
例如,而不是写
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
与上述其余代码一起使用将会起作用。我想这都是由于在解释器管道的不同级别解析/替换了相应的代码。
但有没有办法让整个代码符合预期呢?
答案 0 :(得分:0)
答案是肯定的,它可以在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' ]] …
和特定命令的标志等构造。后者特别有趣,因为扩展它可能会迅速增长到限制重用与misc相关的常见词汇。标志取决于命令。