我有此命令可以执行我想要的操作,但无法在我的.bashrc中使用别名(请注意,它同时使用单引号和双引号):
svn status | awk '$1 =="M"{print $2;}'
我试过了:
alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"
以及其他一些没有运气的常识组合。.我知道bash带有引号非常挑剔。谢谢
Answers:
您只需要正确地转义即可。
alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"
在不使用别名的情况下,可以完成相同的操作。将其放在.bashrc中的函数中:
xx() {
svn status | awk '$1 =="M"{print $2;}'
}
这样,您不必担心报价正确。这将使用与命令行完全相同的语法。
function
关键字与POSIX是不必要的不兼容。别管它了:xx() { ...
#bash
,答案是“使用函数代替” ; 别名除了前缀扩展之外什么也不能做,例如,如果您想在参数上分支,则别名扩展就没有用。
从Bash 2.04开始,除了使用函数或转义@ffledgling的方式之外,还有第三种(更简便的)方式:使用字符串文字语法(这是一个很好的答案)。
因此,例如,如果您想为此onliner做一个别名,它将最终成为:
alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'
所以您只需要添加 $
在字符串前面并转义单引号即可。
这带来了 一个shellcheck警告,您可以使用来安全地禁用它# shellcheck disable=SC2139
。