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 中也发现了相同的行为。
在您提到的示例中,别名的扩展是一个不包含受扩展字符影响的单词,因此您如何引用名称没有区别_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 中,别名执行简单的文本替换(对我来说,定义别名的用处并不明显;直接调用底层函数似乎同样简单) 。
| 归档时间: |
|
| 查看次数: |
5399 次 |
| 最近记录: |