我如下写这个简单的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
变量赋值不能有周围的空间=
标志:
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
指针:空格是在BASH变量赋值重要。 前或等号后不要使用它们。
您使用的是DOS编辑器创建自己的脚本?
击等贝壳,不喜欢CRLF对,只是LF(或\r\n
个字符VS只是普通的\n
字符)。
把你的脚本,通过这个测试
cat -vet myScript.sh
你看到“^ M”字符的行结束了吗? 如果是的话那是一个dos文件。
看看你的系统已经DOS2UNIX的,然后使用它像
dos2unix myScript.sh
此外,由于几个人都发表了评论,请编辑您原来的问题,以消除在你的空间=
在分配到标志array
。
我希望这有帮助。