创建别名时引号、撇号或分号是否会导致命令无法正常工作?

创建别名时引号、撇号或分号是否会导致命令无法正常工作?

我有一个名为 的文件,.bash_aliases用于保存我的别名。虽然文件中只有一个别名,但它可以正常工作,但是当我尝试创建一个新别名时,终端无法识别命令行。这是因为撇号'和引号之间存在冲突吗"

别名:

alias vid-dl="youtube-dl -o 'Videos/randon/%(title)s.%(ext)s'"

错误: vid-dl: command not found

我在终端中使用了如下别名:

vid-dl URL

在 中.bash_aliases,是否需要使用某些东西来指示行已结束?在其他编程语言中,例如 JavaScript 和 C#,行以分号 ( ) 结尾;

当我测试命令行 youtube-dl -o 'Videos/randon/%(title)s.%(ext)s没有别名它也能完美运行。

答案1

使用反斜杠\将以下字符标记为“非特殊”,因此从 MY 开始~/.bashrc

alias bigopenfiles="sudo lsof / | awk '{if(\$7 > 1048576) print \$7/1048576 \"MB\" \" \" \$9 }' | sort -n -u" 
# 
alias deletedfiles="sudo lsof / | egrep 'PID|\(deleted\)'"
# 

让我们把这个复杂的表达式拆开:

alias bigopenfiles="sudo lsof / | awk '{if(\$7 > 1048576) print \$7/1048576 \"MB\" \" \" \$9 }' | sort -n -u"

被 s 包围",因此任何可能混淆解析代码的字符都必须进行反斜杠转义。

'解析代码对程序周围的 s不awk感兴趣(它正在寻找匹配的")。

但是,美元符号很特殊(可能意味着定义别名的 shell 的第 7 个参数,这是一个愚蠢的想法),并且必须用反斜杠转义,例如\$7

然后是 count-on-fingers \"MB\" \" \",两个用引号括起来的字符串awk,所有引号均使用反斜杠转义。

'解析代码对程序周围的 s不awk感兴趣(它正在寻找匹配的")。

最后,还有别名中的其他命令(这次只有| sort -n -u,和,

最后,

结束引号 ( ") 未使用反斜杠转义。

下次解析该字符串时,反斜杠就会消失:

walt@bat:~(0)$ alias bigopenfiles
alias bigopenfiles='sudo lsof / | awk '\''{if($7 > 1048576) print $7/1048576 "MB" " " $9 }'\'' | sort -n -u'
walt@bat:~(0)$ 

答案2

您必须关闭当前终端并打开一个新的终端窗口才能使.bash_aliases文件生效。

或者简单地说. ~/.bash_aliases

相关内容