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

时间:2013-11-21 02:01:29

标签: linux bash quotes double-quotes

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

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

我试过了:

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

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

4 个答案:

答案 0 :(得分:65)

你只需要正确地逃避它。

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

答案 1 :(得分:64)

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

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

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

答案 2 :(得分:0)

除了使用函数或转义@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'

因此,您只需要在字符串前面添加$并转义单引号即可。

答案 3 :(得分:0)

可以反转双引号和单引号,这样双引号在单引号之外

例如,这不起作用:

alias docker-table='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"'

但这有效:

alias docker-table="docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}'"

当您检查实际解释的别名时,您可以看到内部引号实际上已被转义。

$ alias docker-table
alias docker-table='docker ps --format '\''table {{.ID}}\t{{.Image}}\t{{.Status}}'\'''