是否可以像在 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?
Run Code Online (Sandbox Code Playgroud)
即使 的值已从 更改为,您也会在上面的脚本echo "B is $B
输出中看到。我知道重新分配喜欢会解决它。但我想知道是否有可能持有对的引用,以便在更新后立即更新它的值。这发生在没有重新分配的情况下。这可能吗?B is say
A
say
say it
B=$A
B
A
B
A
B=$A
我envsubst
从Bash 中的 Lazy Evaluation 中读到了。是按照方法去做吗?
A="say"
B=$A
echo "B is $B"
envsubst A="say it"
echo "B is $B"
Run Code Online (Sandbox Code Playgroud)
通过 bash 脚本中的引用更新变量?
而类似于C ++,一旦您指定的值的变量,没有办法跟踪,其中从价值是从哪里来的。在 shell 中,所有变量都存储字符串。您可以将变量名称作为字符串存储在另一个变量中,作为引用。您可以使用:
Bash 间接扩展:
A="say"
B=A
echo "B is ${!B}"
A="say it"
echo "B is ${!B}"
Run Code Online (Sandbox Code Playgroud)
Bash 名称参考:
A="say"
declare -n B=A
echo "B is $B"
A="say it"
echo "B is $B"
Run Code Online (Sandbox Code Playgroud)
邪恶eval
:
A="say"
B=A
eval "echo \"B is \$$B\""
A="say it"
eval "echo \"B is \$$B\""
Run Code Online (Sandbox Code Playgroud)
这可能吗?
是 - 将变量的名称存储在 中B
,而不是值中。
来自 Bash 中的 Lazy Evaluation 的 envsubst。是按照方法去做吗?
不,envsubst
做一些不同的事情。
归档时间: |
|
查看次数: |
62 次 |
最近记录: |