在shell脚本中使用数组变量初始化变量

时间:2016-09-05 10:30:45

标签: arrays bash shell variables

我正在尝试使用数组变量连接字符串,但会收到错误。

declare -a arr
arr=(one two three)
var= "${arr[0]}    ${arr[1]}"
echo $var

预期产出

one    two

(1到2之间有4个空格)

我收到以下错误: -

[wasadmin@gblabvl31 IBM]$ ./test.sh
./test.sh: line 10: one     two: command not found

这是否意味着我们无法使用数组元素(用作变量)分配变量? 另外一种方法是什么

2 个答案:

答案 0 :(得分:2)

您必须删除=之后的空格:

var="${arr[0]}    ${arr[1]}"

Bash支持一种语法,允许您在调用命令时临时设置变量。语法与VARNAME=somevalue command类似。这将执行命令,将(环境)变量VARNAME设置为somevalue。如果你说VARNAME= command,那么bash会将其解释为VARNAME="" command,即将变量设置为空字符串。在您的情况下,这会导致bash尝试执行"${arr[0]} ${arr[1]}"部分,就像它是一个命令一样。

答案 1 :(得分:1)

您在作业中有一个额外的空间。替换

var= "${arr[0]}    ${arr[1]}"
#   ^

var="${arr[0]}    ${arr[1]}"

你还应引用echo的参数来保留其中的空格

echo "$var"

您看到错误消息的原因是,当等号后面有空格时,bash会将该命令解释为指定名为var的空环境变量,然后尝试执行命令{{ 1}}被评估为"${arr[0]} ${arr[1]}",因而命令未找到错误