当双引号和单引号都失败时设置别名

当双引号和单引号都失败时设置别名

这个问题不是重复的为什么别名的行为与直接运行 bash 命令不同?因为我已经尝试过该解决方案但没有成功。我将所有单引号替换为双引号,反之亦然。该命令两者都不起作用。

我正在尝试实现一个别名 ,sys它将打开一个文件,我在 中跟踪系统的更改,sys.md附加一个日期,拉出该行,粘贴该行,将其替换-为 markdown h2 格式的 's ,打开一个新行,并插入一个-作为 Markdown 项目符号格式。我从 vi.stackexchange.com 获得了一些实现该命令的帮助。有用:

nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md

当我用双引号替换单引号时,将评估 $pu_ 并且我得到

zsh: event not found: date

所以单引号很重要。但是,当我实现别名时

alias sys="nvim +'$pu_|r!date' +'norm yypVr-o- ' ~/notes/sys.md"

别名失败。nvim打开 ,但日期附加到第二行而不是底部。显然 $pu_ 正在被评估为 BASH 中的变量。 (nvim的语法检查器甚至显示它正在被评估。)反转双精度和单精度以产生

alias sys='nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md'

具有相同的行为。反引号,

alias sys=`nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md`

冻结 bash source .zshrc。我不知道如何继续。任何帮助将不胜感激。

答案1

只需将其放入 bash 函数中即可(您可以将该函数添加到.bashrc):

sys() {
    nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md
}

然后您可以像使用别名一样调用它。

答案2

如果您唯一的问题是了解如何single quote在单引号字符串中包含字符,那么方法如下。使用:

'\''

对于single quote单引号字符串内的字符。

这将结束当前带引号的字符串,然后插入带引号的引号,然后开始新的带引号的字符串。

顺便说一句:由于这是一个常见问题,因此bosh提供了一种自动执行此转换的方法。您可以获取schilytools并编译它们,然后使用bosh.如果您致电:

set -o hashcmds
#b aliasname aliasreplacement

中的值在模式aliasreplacement中输入raw,如果您稍后调用:

alias aliasname

您会看到别名以正确引用的形式出现,如果您输入

alias -R aliasname

raw您会在模式中看到别名。

相关内容