1

是否可以像在 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

envsubstBash 中的惰性评估中了解到。是按照方法去做吗?

A="say"
B=$A
echo "B is $B"
envsubst A="say it"
echo "B is $B"
4

1 回答 1

5

在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 中的惰性评估的 envsubst。是按照方法去做吗?

不,envsubst做一些不同的事情。

于 2021-03-19T15:01:22.707 回答