通过bash脚本中的引用更新变量?
是否可以像在 C++ 中那样在bash 脚本中通过引用来使用变量?
假设我有一个如下所示的脚本:
#!/bin/bash
A="say"
B=$A
echo "B is $B"
A="say it"
echo "B is $B" # This does not get the new value of A but is it possible to using some trick?
即使 的值已从 更改为,您也会在上面的脚本echo "B is $B输出中看到。我知道重新分配喜欢会解决它。但我想知道是否有可能持有对的引用,以便在更新后立即更新它的值。这发生在没有重新分配的情况下。这可能吗?B is sayAsaysay itB=$ABABAB=$A
我envsubst从Bash 中的 Lazy Evaluation 中读到了。是按照方法去做吗?
A="say"
B=$A
echo "B is $B"
envsubst A="say it"
echo "B is $B"
回答
通过 bash 脚本中的引用更新变量?
而类似于C ++,一旦您指定的值的变量,没有办法跟踪,其中从价值是从哪里来的。在 shell 中,所有变量都存储字符串。您可以将变量名称作为字符串存储在另一个变量中,作为引用。您可以使用:
Bash 间接扩展:
A="say"
B=A
echo "B is ${!B}"
A="say it"
echo "B is ${!B}"
Bash 名称参考:
A="say"
declare -n B=A
echo "B is $B"
A="say it"
echo "B is $B"
邪恶eval:
A="say"
B=A
eval "echo "B is $$B""
A="say it"
eval "echo "B is $$B""
这可能吗?
是 - 将变量的名称存储在 中B,而不是值中。
来自 Bash 中的 Lazy Evaluation 的 envsubst。是按照方法去做吗?
不,envsubst做一些不同的事情。