gpt4 book ai didi

linux - shell 脚本 - 将一个变量分配给另一个 - 数组

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:04 27 4
gpt4 key购买 nike

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

这是我的实际脚本。

#!/bin/sh

a=AA
b=BB
c=CC
d=DD
e=EE
f=FF

alpha_array=(a b c d e f)
process_array=(proc1 proc2 proc3 proc4)
array_1=("")
array_2=("")

display_array() {
echo "array1 = ${array_1[@]}"
echo "array2 = ${array_2[@]}"
}

checkarg() {
if [[ " ${alpha_array[*]} " == *" $token "* ]]; then
echo "alphabet contains $token "
array_1=("${array_1[@]}" "$token")
$token=${$token}
echo "TOKEN = $token"
elif [[ " ${process_array[*]} " == *" $token "* ]]; then
echo "process contains $token "
array_2=("${array_2[@]}" "$token")
else
echo "no matches found"
display_array
exit 1
fi
}

for token in $@
do
echo $token
checkarg
done

display_array

下面两行

$token=${$token}
echo "TOKEN = $token"

应该将我的输出显示为

TOKEN = AA
TOKEN = BB

当我使用以下参数运行我的脚本时。

./build.sh a b proc1

请帮我解决这两行问题。

最佳答案

听起来您想要的是变量间接寻址。您的问题中有很多代码与此无关,但让我尝试将其提炼为我理解的重要部分:

a=AA
b=BB
alpha_array=(a b)
for token in "${alpha_array[@]}"; do
value=${!token}
echo "value of variable $token is $value"
done

运行时会输出:

value of variable a is AA
value of variable b is BB

有关详细信息,请参阅 BashFAQ #6 .


顺便说一下,这通常可以用关联数组的使用来代替,在这种情况下你可以这样写:

declare -A tokens=( [a]=AA [b]=BB )
for token in "${!tokens[@]}"; do
value=${tokens[$token]}
echo "value of token $token is $value"
done

这样做的好处是您的键/值对都存储在数组中——不会与其他变量名称发生冲突。

关于linux - shell 脚本 - 将一个变量分配给另一个 - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com