在 zsh 别名中转义双引号和单引号

在 zsh 别名中转义双引号和单引号

我正在尝试复制这个答案的结果线但使用不同的命令。

我尝试复制我的答案,但加载终端时 zsh 中不断出现错误

/Users/k/.zshrc:155: defining function based on alias `convert'
/Users/k/.zshrc:155: parse error near `()'

这是我尝试为其创建别名的命令

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' SOME_FILE_NAME.pem

我想将其别名为

convert SOME_FILE_NAME.pem

这是我在 zshrc 中尝试过的

conv() {
    awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' "$@"
}

答案1

要为此创建别名,您需要执行以下操作:

alias conv='awk '\''NF {sub(/\r/, ""); printf "%s\\n",$0;}'\'

创建函数:

conv() awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' "$@"

但是,如果您alias在运行该conv函数定义命令之前已经定义了,则其中的conv将会扩展为别名定义,从而导致zsh尝试解释如下内容:

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}'() awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' "$@"

导致您所看到的错误。

您必须选择:使用别名或函数,而不是两者都使用。

要删除别名(这样您就可以定义一个函数):

unalias conv

相关内容