通过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做一些不同的事情。


以上是通过bash脚本中的引用更新变量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>