例如:
variable="version1"
filename="Testfile_$variable"
echo $filename
variable="version2"
echo $filename
filename="Testfile_$variable"
echo $filename
产生输出:
Testfile_version1
Testfile_version1
Testfile_version2
为什么在更改filename
后明确地将值重新分配给filename
后,它只会将variable
的值更改为“Testfile_version2”?我想当第二个echo $filename
被调用时,它会检查filename
的值,看看它中有$variable
,查找variable
的值和看到值已更改,然后将该值放入filename
,但似乎情况并非如此。
非常感谢任何帮助!
答案 0 :(得分:2)
[]
未存储对filename
的引用,它存储了赋值(variable
)中生成的文字字符串。因此,您必须重新分配Testfile_version1
才能反映对filename
答案 1 :(得分:0)
这就是它的工作原理。 shell不会跟踪变量所依赖的变量 - 这里没有“引用”或指针。
执行filename="Testfile_$variable"
时,shell会获取$variable
的当前值,并从filename
中构建新变量$variable
。
换句话说,它复制$variable
的内容而不是引用。
答案 2 :(得分:0)
查找变量的值并将其添加到第一次分配给filename的前缀Testfile_中。之后,更改变量的值不会追溯更新filename的值。
考虑这个问题的另一种方法是你刚刚完成了filename = $ variable。您是否希望更改变量值以更改文件名的值?
更具体地说,变量filename的值是一个字符串,它是通过取一个模板字符串并用一些值(在这种情况下为变量的值)代入它来计算的。完成替换之后,filename的值只是一个字符串,并且不知道它是如何获得该值的。
答案 3 :(得分:0)
在使用时评估过一次。
即,$filename
不是Testfile_$variable
,而是评估该表达式的结果。
答案 4 :(得分:0)
Bash每次评估表达式时都会执行完整的变量扩展。那是
filename="Testfile_$variable"
可以解释为
"Testfile_$variable"
。$filename
。 因此,$variable
的任何进一步更改都不会影响$filename
的价值。
您可以使用函数而不是变量
以某种方式更接近您期望的行为get_filename(){
filename="Testfile_$variable"
echo $filename
}
variable=version1
get_filename
variable=version2
get_filename
在不明确重新分配变量的情况下打印不同的行。