定义别名时使用单引号还是双引号?

Gre*_*ine 7 shell bash alias quoting

我知道双引号的内容是展开的,而单引号的内容不是,这样

echo '$1'
Run Code Online (Sandbox Code Playgroud)

$1
Run Code Online (Sandbox Code Playgroud)

然而

echo "$1"
Run Code Online (Sandbox Code Playgroud)

<the argument - blank in this particular example>
Run Code Online (Sandbox Code Playgroud)

一样

echo $1
Run Code Online (Sandbox Code Playgroud)

然而,问题Bash: How to create an alias in .bashrc for awk with parameters让我想知道为什么在声明别名时使用双引号而不是单引号,因此:

alias cutf="_cutf"
Run Code Online (Sandbox Code Playgroud)

代替

alias cutf='_cutf'
Run Code Online (Sandbox Code Playgroud)

我会像后一个例子一样使用单引号。网络上的大多数示例也使用 single ,除非需要一些扩展。但是,在这种情况下,在我看来,没有明显的扩展。在这种情况下,它们是可以互换的,还是因为使用了函数定义而需要双引号?

zza*_*per 12

这是对标题(将我带到这里)提出的问题的回答,而不是对 OP 的特定问题的回答。

单引号是动态评估的:

alias QS='echo $PWD'
Run Code Online (Sandbox Code Playgroud)

双引号在创建时评估,此后永远不会改变:

alias QD="echo $PWD"
Run Code Online (Sandbox Code Playgroud)

在 bash、zsh 和我猜其他 shell 中也发现了相同的行为。


dha*_*hag 5

在您提到的示例中,别名的扩展是一个不包含受扩展字符影响的单词,因此您如何引用名称没有区别_cutf

$ alias cutf="_cutf"
$ alias cutf
alias cutf='_cutf'

$ unalias cutf
$ alias cutf='_cutf'
$ alias cutf
alias cutf='_cutf'

$ unalias cutf
$ alias cutf=_cutf
$ alias cutf
alias cutf='_cutf'
Run Code Online (Sandbox Code Playgroud)

cutf正如您在该交互中所看到的,每次调用别名的值都会给出相同的结果。所以,是的,这里的引用样式是可以互换的。

扩展与函数名无关:至少在 bash 中,别名执行简单的文本替换(对我来说,定义别名的用处并不明显;直接调用底层函数似乎同样简单) 。