如何解决如何在 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 举报,一经查实,本站将立刻删除。