[英]bash alias command with both single and double quotes
我有这个命令可以执行我想要的操作,但我无法在我的 .bashrc 中为其添加别名(请注意,它同时使用单引号和双引号):
svn status | awk '$1 =="M"{print $2;}'
我试过:
alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"
还有其他一些没有运气的常识组合..我知道bash对引号非常挑剔..那么正确的别名方法是什么,为什么? 谢谢
你只需要正确地逃避它。
alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"
这是在不使用别名的情况下完成相同事情的东西。 把它放在你的 .bashrc 中的一个函数中:
xx() {
svn status | awk '$1 =="M"{print $2;}'
}
这样您就不必担心报价是否正确。 这与您在命令行中使用的语法完全相同。
从Bash 2.04 开始,除了使用函数或逃避@ffledgling 所做的方式之外,还有第三种(更简单的)方法:使用字符串文字语法(这是一个很好的答案)。
因此,例如,如果您想为这个在线用户创建一个别名,它最终将是:
alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'
所以你只需要在字符串前面添加$
并转义单引号。
这会带来一个 shellcheck 警告,您可以使用# shellcheck disable=SC2139
安全地禁用# shellcheck disable=SC2139
。
您可以还原双引号和单引号,使双引号在单引号之外。
例如,这不起作用:
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}}'\'''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.