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

如何解决如何在 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,$9}'
  • ESC,然后按 '(单引号)。在您的示例中,这应该给您类似
    'ls -lAh | awk '\''BEGIN{FS=" "; OFS=" "} {print $6,$9}'\'
  • 继续执行其余命令或将引用的字符串复制并粘贴到编辑器中。

通常,要在单引号内引用单引号,您需要插入结束引号 '、转义引号 \' 以及必要时插入开始引号 ',如下所示:

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

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

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

然后重新加载bashrc:

source .bashrc

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

,

另一种选择是对“外部”引号使用双引号,因为双引号字符串支持转义。诀窍是知道需要转义什么:

point: {
        events: {
          mouseOver: function () {
            var point = this,chart = this.series.chart,nodes = chart.series[0].nodes;


            bfs(this.id);

            function bfs(start) {
              const queue = [findNodeById(start)];

              // Store visited nodes in a set
              const visited = new Set();
              // Loop until we have something in the queue
              while (queue.length > 0) {

                // Pop out first element from queue
                const topNode = queue.shift();

                // Edges TO first element
                const prevEdges = topNode.linksTo;

                for (const edge of prevEdges) {
                  // For each edge find their corresponding nodes and set their state to 'hover'
                  let prevNode = findNodeById(edge.from);
                  prevNode.setState("hover");

                  // If edge is not visited yet,push to Set and add to queue
                  if (!visited.has(prevNode)) {
                    visited.add(prevNode);
                    queue.push(prevNode);
                  }
                  // nextNode.setState('inactive')
                }

 
              }
            }
           
            function findNodeById(id) {
              return nodes.filter((node) => node.id == id)[0];
            }
          },},

请注意,如果您要求 alias lah="ls -lAh | awk 'BEGIN{FS=\" \"; OFS=\" \"} {print \$6,\$7,\$8,\$5,\$9}'" 显示此别名,它会将其标准化为使用单引号,如@Bodo 的回答:

zsh

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?