我有这个命令可以做我想要的但是我无法在我的.bashrc中使用别名(注意它使用单引号和双引号):
svn status | awk '$1 =="M"{print $2;}'
我试过了:
alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"
还有其他一些没有运气的常识组合。我知道bash非常挑剔引号..所以什么是别名的正确方法,为什么?感谢
答案 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}}'\'''