Arrays 将输入字符串视为BASH中定义的数组名称
我目前正在编写一个脚本,该脚本接收输入字符串,然后将其用作已定义的数组名。但我坚持了下来,提前谢谢你Arrays 将输入字符串视为BASH中定义的数组名称,arrays,bash,Arrays,Bash,我目前正在编写一个脚本,该脚本接收输入字符串,然后将其用作已定义的数组名。但我坚持了下来,提前谢谢你 a=(1 2 3) b=(4 5 6) c=(7 8 9) 如果用户的输入是“a”,我希望数组的结果是(1 2 3) 我想要的是:result\u数组=(“${${input}[@]}”)=>result\u数组=(“${a[@]}”)=(123) 注意:我不想使用IF语句,比如“IF input=a或b或c,result\u array=a或b或c”,因为我必须多次执行此步骤 a=(1 2
a=(1 2 3)
b=(4 5 6)
c=(7 8 9)
如果用户的输入是“a”,我希望数组的结果是(1 2 3)
我想要的是:result\u数组=(“${${input}[@]}”)=>result\u数组=(“${a[@]}”)=(123)
注意:我不想使用IF语句,比如“IF input=a或b或c,result\u array=a或b或c”,因为我必须多次执行此步骤
a=(1 2 3);
b=(4 5 6);
# ...
input="a"; # get the user input
result_array=${input}[@];
echo \(${!result_array}\)
将打印:
(1 2 3)
这个例子比这个例子更简单。也更快
#!/bin/bash
case "$1" in
a) result_array=(1 2 3);;
b) result_array=(4 5 6);;
c) result_array=(7 8 9);;
esac
echo ${result_array[@]}
我还制作了一个脚本,根据与a比较的字符ascii位置计算数组,因为您说过不喜欢使用IF
#!/bin/bash
# a ascii value
a_num=$(echo a|od -t d1 | awk '{printf "%s" ,$2}')
# input ascii value
ascii=$(echo $1|od -t d1 | awk '{printf "%s" ,$2}')
multiplier=$((($ascii - $a_num) * 3))
result_array=( $((1 + $multiplier)) $((2 + $multiplier)) $((3 + $multiplier)))
echo ${result_array[@]}
输出:
./ascii.sh a
1 2 3
./ascii.sh b
4 5 6
./ascii.sh c
7 8 9
./ascii.sh w
67 68 69
./ascii.sh x
70 71 72
有两种方法可以做到这一点。从
a=(1 2 3)
b=(4 5 6)
# ...
input="a"
b
的input
变量,input=b
不足。这将输入[0]
(因此a[0]
)设置为“b”。您需要使用declare-n input=b
伟大的这就是我需要的。谢谢虽然这不是我一开始想要的,但我喜欢你的想法(用“案例”来处理这种情况)。非常感谢
a=(1 2 3)
b=(4 5 6)
# ...
input="a"
declare -n input # set the "nameref" attribute for the variable
result_array=( "${input[@]}")
printf "%s\n" "${result_array[@]}"
1
2
3
tmp="${input}[@]" # a string that looks like array expansion
result_array=( "${!tmp}" )
printf "%s\n" "${result_array[@]}"
1
2
3