在bash中的别名内转义单引号

时间:2016-11-26 01:28:09

标签: bash escaping alias

我正在尝试在我的.bashrc文件中设置一个别名,如下所示:

clear && printf '\033[3J'

但以下不起作用

alias clall= "clear && printf \'\033[3J\'"
alias clall= "clear \&\& printf \'\\033\[3J\'"

1 个答案:

答案 0 :(得分:4)

关于别名的一般规则是,如果您对如何使用它们有疑问(或者它们是否足够用于您的目的),您应该使用函数。函数为您提供了所有功能(相当多),并且不需要任何引用/转义语法:

clall() { clear && printf '\033[3J'; }

也就是说,指定所需别名的一种方法是使用以下bash扩展语法:

# use $'' to make \' and '' valid/meaningful
alias clall=$'clear && printf \'\\033[3J\''

...使用$''允许单引号(和反斜杠)在单引号内转义;在正常''引用下,包含的反斜杠是字面的。更多POSIX-y方法是:

# use '"'"' to put a literal single-quote inside syntactic single-quotes
alias clall='clear && printf '"'"'\033[3J'"'"''

...或者,如果(在这里)你没有任何在双引号内特殊的语法:

# ...or just use double quotes for the whole thing, absent a reason not to
# ...using command substitution, paramater expansion, etc. would be such a reason.
alias clall="clear && printf '\033[3J'"