我有一个疑问,当我声明一个值并将其分配给某个变量时,我不知道如何将同样的值重新分配给另一个变量。请看下面的代码片段。
#/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 = $
我有一个疑问,当我声明一个值并将其分配给某个变量时,我不知道如何将同样的值重新分配给另一个变量。请看下面的代码片段。
#/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 = $
a=ARG1
arg2=$a
echo "ARG 2 = $arg2"
在本地Shell变量中使用小写变量名是按照惯例而非必要的,但这样做的好处是避免与环境变量和内置变量发生冲突,因为它们通常使用全大写字母命名。
ARG 2 = value
是问题所要求的输出格式。它不是我们正在运行的代码的一部分;相反,它是代码负责打印的输出。 - Charles DuffyC=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
是否应该使用这些方法是一个问题。通常,不可变代码更容易阅读和理解(几乎在任何编程语言中)。但有时你确实需要以某种方式完成一些事情。希望这个答案能够帮助到您。