我正在编写这个简单的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
答案 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
个符号周围的空格。
我希望这会有所帮助。