【问题标题】:Bash array: Unexpected Syntax error [closed]Bash数组:意外的语法错误[关闭]
【发布时间】:2012-06-17 01:53:07
【问题描述】:

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

的形式执行它

【问题讨论】:

  • 这不是关联数组。这是一个普通的数字索引数组。
  • @DennisWilliamson 哦,好的。我会编辑它
  • @user1357576:将解决方案发布为答案并将其标记为已接受,不要将其编辑到问题中。另外,不要编辑标题来解决它,当您接受答案时,网站会将问题标记为已解决。

标签: arrays bash shell syntax


【解决方案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

【讨论】:

  • 不走运。我删除了空格仍然给我语法错误
  • 有趣的是,当我直接在终端上执行它时,它可以工作。但是当我在文件中使用相同的东西时,它不会!
  • @user1357576:当我将上述内容放入文件时,这里工作正常。当然,语法错误行会杀死脚本,但如果它只是最后的无空格赋值,它可以正常工作。
  • 我知道我做错了什么。我将它作为 sh test.sh 执行,然后它抛出了错误。当我以 ./test.sh 执行它时,它运行良好!
  • 啊,是的,sh 并不总是'sh'。在 ubuntu 12.04 上,它实际上是 'dash' shell 的别名。
【解决方案2】:

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

【讨论】:

  • 我明白了> 我直接在终端上执行了相同的命令并且它有效。但是我在 test.sh 中输入并执行相同的命令,它们会抛出错误..你知道为什么吗?
  • @user1357576 从您上面的评论中,您似乎已经了解了shbash 之间的区别。在某些环境中,sh 不能保证为 bash。事实上,sh 通常与纯 POSIX shell 相关联,例如 dash
【解决方案3】:

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

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

让你的脚本通过这个测试

cat -vet myScript.sh

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

看看你的系统是否有dos2unix然后像使用它

dos2unix myScript.sh

此外,正如一些人对此发表的评论一样,请编辑您的原始问题,以消除分配给array= 符号周围的空格。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 2012-03-10
    • 1970-01-01
    • 2013-11-11
    • 2013-01-10
    • 2012-02-26
    • 2012-10-03
    • 2014-04-02
    • 2011-10-26
    相关资源
    最近更新 更多