我知道双引号的内容被扩展,而单引号的内容没有扩展,这样
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 脚本虽然非常有用,但也是一种非常简单的语言。我(和我认识的其他一些人)倾向于默认使用双引号,只是出于习惯的力量 - 而且我从未遇到过问题。