Bash数组:意外的语法错误

时间:2012-06-14 03:17:54

标签: arrays bash shell syntax

我正在编写这个简单的bash脚本如下。

#!/bin/bash

array=( /home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf )
echo ${array[@]}

我希望它能打印数组中所有文件的名称。但我得到了这个错误:

test.sh: 3: Syntax error: "(" unexpected

如果我将数组的声明更改为

array = {/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf}

此错误消失但我仍有新错误

test.sh: 3: array: not found
test.sh: 4: Bad substitution

如何解决此问题?这是我第一次进行shell编程,因此我无法自行解决问题。

解决:

我正在执行它作为sh test.sh但我忘了我必须执行它 bash test.sh

3 个答案:

答案 0 :(得分:1)

变量分配在=符号周围不能有空格:

array=( /a/b/  /c/d )
     ^--no spaces 

你确定吗?

marc@panic:~$ array =(a b)      
bash: syntax error near unexpected token `('
marc@panic:~$ array= (a b)  
bash: syntax error near unexpected token `('
marc@panic:~$ array = (a b)
bash: syntax error near unexpected token `('
marc@panic:~$ array=(a b)  
marc@panic:~$ echo ${array[1]}
b

答案 1 :(得分:0)

指针:空间对于BASH中的变量赋值很重要。不要在等号之后使用 之前

答案 2 :(得分:0)

您使用DOS编辑器创建脚本吗?

Bash等shell,不喜欢CRLF对,只是LF(或\r\n chars VS只是普通\n char)。

通过此测试放置脚本

cat -vet myScript.sh

你看到行尾的'^ M'字符?如果这样是一个dos文件。

查看您的系统是否具有dos2unix,然后像

一样使用它
dos2unix myScript.sh

此外,正如有几位评论者所做的那样,请修改原始问题,以消除=作业中array个符号周围的空格。

我希望这会有所帮助。