我正在尝试使用数组变量连接字符串,但会收到错误。
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
这是否意味着我们无法使用数组元素(用作变量)分配变量? 另外一种方法是什么
答案 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]}"
,因而命令未找到错误