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

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

我知道双引号的内容被扩展,而单引号的内容没有扩展,这样

echo '$1'

给出

$1

然而

echo "$1"

给出

<the argument - blank in this particular example>

echo $1

然而,问题Bash:如何在 .bashrc 中为带参数的 awk 创建别名让我想知道为什么双引号和不是声明别名时使用单引号,因此:

alias cutf="_cutf"

代替

alias cutf='_cutf'

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

答案1

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

单引号是动态评估的:

alias QS='echo $PWD'

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

alias QD="echo $PWD"

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

答案2

在您提到的示例中,别名的扩展是一个不包含受扩展字符影响的单词,因此您如何引用名称没有区别_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'

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

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

答案3

就这么简单——如果没有变量,括号是可以互换的。 Shell 脚本虽然非常有用,但也是一种非常简单的语言。我(和我认识的其他一些人)倾向于默认使用双引号,只是出于习惯的力量 - 而且我从未遇到过问题。

相关内容