0

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

就像:

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

echo "$VAR_1 $VAR_2"

这与其他语言不同,就像Perl我们总是有变量名前面的美元符号,我只是想知道 shell 脚本这样做的任何充分理由,或者它只是一个约定......?

4

3 回答 3

6

Shell 是与 Perl 不同的语言,是与 C++ 不同的语言,是与 Python 不同的语言。您可以为每种语言添加“具有不同规则”。

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

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

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

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

等等。

于 2012-11-28T07:59:37.947 回答
1

在 shell 中,$符号不是变量名的一部分。它只是告诉shell 用同名变量的内容替换后面的单词,即$foo“在此处插入变量的内容foo”。

这在分配给变量时不使用,因为您明确不想插入旧内容;您想使用变量本身(在某些方面这类似于取消引用指针)。

于 2012-11-28T07:59:26.237 回答
0

它基本上是一个语法约定。

DOS/.bat 文件语法的工作方式相同。

1)创建一个变量,没有元字符。

2)要“取消引用”变量的内容,请使用元字符。

DOS:
set VAR=123
echo %VAR%
于 2012-11-28T08:00:18.160 回答