zsh buildtins可以别名吗?

时间:2017-12-27 22:38:41

标签: zsh-alias

阅读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与上述其余代码一起使用将会起作用。我想这都是由于在解释器管道的不同级别解析/替换了相应的代码。

但有没有办法让整个代码符合预期呢?

1 个答案:

答案 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相关的常见词汇。标志取决于命令。