这个问题不是重复的为什么别名的行为与直接运行 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
您会在模式中看到别名。