我在教科书中遇到了两个 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
其值是一个文字b
。a=$b
使名为 的变量a
具有与已存在的名为 的变量相同的值b
。
答案2
在这种情况下,a=$b
您将变量的值分配b
给a
。如果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