我如何在oh my zsh别名中转义特殊字符



所以我试图创建一个别名,列出当前目录中的文件,如"ls-lAh";会,但只针对我想要的特定列。所以我想出了这个命令:

ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}'

这将只打印我需要的列,它们是日期和时间、文件大小和文件名。

然而,如果我想为这个命令创建一个别名,我显然需要转义很多字符,以便正确解释它们,但我没有做到这一点。有时,当我在单引号或美元符号前面放一个反斜杠时,它只是以某种方式断开,我无法使其工作。

请帮助我理解我应该如何逃离特殊字符,以便正确解释。

如果它改变了什么,我在MacOS上。如果需要,请要求澄清。

编辑:-以下是我在尝试实际创建别名时所做的尝试:

alias lah='ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}''

我试着把反斜杠放在每个特殊字符之前,第一次尝试时我只是把它们放在单引号之前,这不起作用,它告诉我类似zsh: parse error at {的东西。然后我在每个大括号之前放了一个反斜杠,但这不起作用,显然美元符号也是特殊字符,所以我在这些字符之前放了反斜杠,但是每当我在键入命令后按回车键时,它就会生成一行新的内容quote>,我必须在其中放一个引号来结束命令,当我这样做时,它会打印出:zsh: command not found: {print

问题是如何正确地用单引号引用已经包含单引号的字符串。

ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}'

为了容易地获得正确引用的字符串,您可以使用ZSH的密钥序列ESC'(单引号(。

  • 键入要引用的字符串,例如
    ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}'
  • ESC,然后按'CD_5的内容
  • 继续执行命令的其余部分或复制&将引用的字符串粘贴到编辑器中

通常,要在单引号中引用单引号,您需要插入一个结束引号'、一个转义引号',如有必要,还需要一个开头引号',如下所示:

alias lah='ls -lAh | awk '''BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}''

另一个选项是对"外部"引号使用双引号,因为双引号字符串中支持转义。诀窍是知道什么需要逃脱:

alias lah="ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}'"

请注意,如果您要求zsh显示此别名,它会将其规范化为使用单引号,如@Bodo的回答:

% alias lah
lah='ls -lAh | awk '''BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}''

您应该在.bashrc中设置一个函数,而不是别名。例如:

ldir() {
ls -lAh | awk 'BEGIN{FS=" "; OFS=" "} {print $6,$7,$8,$5,$9}'}

然后重新加载bashrc:

source .bashrc

您现在应该能够运行ldir命令了。

相关内容

  • 没有找到相关文章

最新更新