为什么声明shell脚本变量没有先前的`$`?

poi*_*000 0 shell

我注意到在shell脚本中,当我们声明一个变量时,不需要前面的美元符号,但是当我们想要稍后访问这个变量时,我们应该在这个变量名前添加一个美元符号.

就像:

#!/bin/sh
VAR_1=Hello
VAR_2=Unix

echo "$VAR_1 $VAR_2"
Run Code Online (Sandbox Code Playgroud)

这与其他语言不同,比如Perl我们总是会有前面带有变量名的美元符号,我只是想知道shell脚本以这种方式做的任何好理由,或者它只是一个约定......?

Mor*_*kus 6

Shell是一种与Perl不同的语言,而C++是一种与Python不同的语言.您可以为每种语言添加"使用不同的规则".

在shell中,标识符如VAR_1命名变量,美元符号用于调用扩展.$var被替换为var内容; 如果已设置,${var:-foo}则替换为var内容;如果foo未设置变量,则替换为单词.扩展也适用于非变量,例如,${${var##*/}%.*}如果var包含具有完整路径和扩展名的文件名,则可以链接扩展,如果只留下文件基名.

在Perl中,变量前面的sigil告诉Perl如何解释标识符:$var是标量,@var数组,%var散列等.

在Ruby中,varible前面的sigil告诉Ruby它的作用域:var是一个局部变量,$var是一个全局变量,是一个@var对象的实例变量,@@var是一个类变量.

在C++中,我们在变量名前面没有符号.

等等.