20

我正在编写这个简单的 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执行

4

3 回答 3

5

变量赋值不能在=符号周围有空格:

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
于 2012-06-14T03:22:15.377 回答
2

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

于 2012-06-14T03:30:36.553 回答
0

您是否使用 DOS 编辑器来创建脚本?

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

把你的脚本通过这个测试

cat -vet myScript.sh

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

查看您的系统是否有 dos2unix 然后像使用它一样使用它

dos2unix myScript.sh

此外,正如一些人对此发表评论的那样,请编辑您的原始问题,以消除=作业中您的标志周围的空格array

我希望这有帮助。

于 2012-06-14T03:42:47.853 回答