“a=b”和“a=$b”之间有区别吗?

“a=b”和“a=$b”之间有区别吗?

我在教科书中遇到了两个 Unix 脚本。他们在其中一个中实现了a=$b(以 max=$a 的形式),在另一个中a=b(以 number=num 的形式)。

这些是相同的事情还是有区别?

答案1

$ a=b
$ printf $a
b
$ b=hello
$ a=$b  
$ printf $b
hello

基本上a=b创建一个名为的变量,a其值是一个文字ba=$b使名为 的变量a具有与已存在的名为 的变量相同的值b

答案2

在这种情况下,a=$b您将变量的值分配ba。如果a=b您正在分配文字字符串“ ”a的值b

例如b=10,现在假设您要分配a与 相同的值b。您可以执行以下任一操作:

a=$b

或者,

a=10

答案3

bash也可以使用 寻求帮助来回答这些问题set -x。该标志告诉 bash 在运行命令之前显示命令及其扩展参数:

首先,一些设置:

$ a=some-value
$ b=some-other-value
$ set -x

现在让我们看看 shell 如何解释这些命令:

$ a=b
+ a=b

变量的值a被设置为文字字符串“b”。

现在让我们尝试一下$b

$ a=$b
+ a=some-other-value

这里我们告诉 shell评价 $b并将 的值插入b到命令中。

这显示了 shell 的一些价值——它解释变量和通配符,而不是让单独的命令完成工作。例如,ls不必知道如何解释“*.txt”,因为 shell 在ls启动之前完成了工作:

$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt  b.txt  c.txt

相关内容