带有单引号和双引号的bash alias命令

问题描述 投票:53回答:3

我有这个命令做我想要的但我无法在我的.bashrc中对其进行别名(注意它使用单引号和双引号):

svn status | awk '$1 =="M"{print $2;}'

我试过了:

alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"

还有其他一些没有运气的常识组合..我知道bash非常挑剔引号..所以什么是别名的正确方法,为什么?谢谢

linux bash quotes double-quotes
3个回答
66
投票

你只需要正确地逃脱它。

alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"

66
投票

这是在不使用别名的情况下完成同样的事情。将它放在.bashrc中的函数中:

xx() {
    svn status | awk '$1 =="M"{print $2;}'
}

这样您就不必担心报价恰到好处。这使用与命令行完全相同的语法。


1
投票

除了使用函数或逃避@ffledgling的方式之外,还有第三种方法(我发现更容易):使用字符串文字语法(here is an excellent answer)。

所以,例如,如果你不想制作this onliner的别名,它最终会成为:

alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'

所以你只需要在字符串前添加$并转义单引号。

© www.soinside.com 2019 - 2024. All rights reserved.