在Bash中将一个变量赋值给另一个变量?

16

我有一个疑问,当我声明一个值并将其分配给某个变量时,我不知道如何将同样的值重新分配给另一个变量。请看下面的代码片段。

#/bin/sh    
#declare ARG1 to a
a=ARG1
#declaring $a to ARG2    
ARG2=$`$a`

echo "ARG 2 = $ARG2"

它应该显示我的输出为

ARG 2 = ARG1

...但实际输出是:

line 5: ARG1: command not found
ARG 2 = $

我修改了标题,因为问题似乎与声明变量无关。(变量可以在shell中声明,但这是必要的,以明确设置类型或作用域元数据,而不是分配值)。 - Charles Duffy
1
可能是在bash脚本中复制变量之间的值的重复问题。 - jww
2个回答

25
< p >将与变量< code>dest 相关联的值分配给变量< code>source ,您只需要运行< code> dest = $ source 。 < p>例如,要将与变量< code>arg2 相关联的值分配给变量< code>a :
a=ARG1
arg2=$a
echo "ARG 2 = $arg2"

在本地Shell变量中使用小写变量名是按照惯例而非必要的,但这样做的好处是避免与环境变量和内置变量发生冲突,因为它们通常使用全大写字母命名。


谢谢你的回答。你说得对。我也觉得这很简单。但是我在这里发布了我的脚本。请帮帮我。 - Murthy
1
我已经修改了我的问题并添加了几行脚本。请帮我解决这个问题。 - Murthy
在给出正确答案后修改你的问题是不合适的。在这种情况下,你应该提出一个新的问题。 - Charles Duffy
@F8ER,你说得对,但是由于数组需要不同的语法,最好单独提出问题。 - Charles Duffy
@joseph_morris,显然这与本答案有什么关系?ARG 2 = value是问题所要求的输出格式。它不是我们正在运行的代码的一部分;相反,它是代码负责打印的输出。 - Charles Duffy
显示剩余3条评论

4
您可能希望使用别名而不是复制变量。例如,如果需要进行变更。或者如果您想在不同的变量上多次运行函数。以下是它的工作原理。
例子:
C=cat
declare -n VAR=C
VAR+=" says Hi"
echo "$C"  # prints "cat says Hi"

数组/字典示例:

A=(a a a)
declare -n VAR=A  # "-n" stands for "name", e.g. a new name for the same variable
VAR+=(b)
echo "${A[@]}"  # prints "a a a b"

也就是说,VAR 实际上变成了与原始变量相同的变量。你没有进行复制,而是添加了一个别名。以下是函数示例:

function myFunc() {
  local -n VAR="$1"
  VAR="Hello from $2"
  echo "I've set variable '$1' to value '$VAR'"
}
myFunc Inbox Bob  # I've set variable 'Inbox' to value 'Hello from Bob'
myFunc Luke Leia  # I've set variable 'Luke' to value 'Hello from Leia'
echo "$Luke"  # Hello from Leia

是否应该使用这些方法是一个问题。通常,不可变代码更容易阅读和理解(几乎在任何编程语言中)。但有时你确实需要以某种方式完成一些事情。希望这个答案能够帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接