pra*_*mer 63 linux bash quotes double-quotes
我有这个命令做我想要的但我无法在我的.bashrc中对其进行别名(注意它使用单引号和双引号):
svn status | awk '$1 =="M"{print $2;}'
Run Code Online (Sandbox Code Playgroud)
我试过了:
alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"
Run Code Online (Sandbox Code Playgroud)
还有其他一些没有运气的常识组合..我知道bash非常挑剔引号..所以什么是别名的正确方法,为什么?谢谢
ffl*_*ing 74
你只需要正确地逃脱它.
alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"
Run Code Online (Sandbox Code Playgroud)
EJK*_*EJK 70
这是在不使用别名的情况下完成同样的事情.将它放在.bashrc中的函数中:
xx() {
svn status | awk '$1 =="M"{print $2;}'
}
Run Code Online (Sandbox Code Playgroud)
这样您就不必担心报价恰到好处.这使用与命令行完全相同的语法.
从Bash 2.04 开始,除了使用函数或逃避@ffledgling 所做的方式之外,还有第三种(更简单的)方法:使用字符串文字语法(这是一个很好的答案)。
因此,例如,如果您想为这个在线用户创建一个别名,它最终将是:
alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'
Run Code Online (Sandbox Code Playgroud)
所以你只需要$
在字符串前面添加并转义单引号。
这会带来一个 shellcheck 警告,您可以使用# shellcheck disable=SC2139
.