【问题标题】:I am getting error "array.sh: 3: array.sh: Syntax error: "(" unexpected"我收到错误“array.sh:3:array.sh:语法错误:”(“意外”
【发布时间】:2014-10-03 00:58:49
【问题描述】:

我写了以下代码:

#!/bin/bash
#Simple array
array=(1 2 3 4 5)

echo ${array[*]}

我收到错误: array.sh:3:array.sh:语法错误:“(”意外

根据我从 Google 了解到的情况,这可能是因为 Ubuntu 现在默认不采用“#!/bin/bash”...但是我再次添加了该行,但错误是还在来。

我也尝试过执行bash array.sh,但没有运气!它打印空白。

我的 Ubuntu 版本是:Ubuntu 14.04

【问题讨论】:

  • sh array.sh 将产生该错误,因为普通的 bourne shell,例如 dash,不理解数组。 bash array.sh 应该可以正常工作。我测试了你的脚本,在bash 下,它对我有用。
  • @John1024, bash array.sh 在我的情况下打印空白。
  • echo $BASH_VERSION 说什么?您可能使用的是旧版本的 bash。
  • @NedDeily,4.3.8(1)-发布
  • 在shebang行后添加set -x

标签: arrays bash shell ubuntu


【解决方案1】:

我奇迹般地解决了这个问题。为了解决这个问题,我找到了一个链接,它被描述为使用以下代码消失了。执行后,问题就解决了。

chsh -s /bin/bash adhikarisubir

grep ^adhikarisubir /etc/passwd

仅供参考,“adhikarisubir”是我的用户名

执行这些命令后,bash array.sh 产生了预期的结果。

【讨论】:

  • 奇怪。即使您的默认 shell 是 csh,您也应该能够使用 bash 命令运行 bash 脚本。我不认为这是一个解决方案,只是一个“变通”。
  • @BjørneMalmanger,同意!但是我记录了这个答案,这样如果其他人在系统中遇到这种奇怪的行为,他可能会发现这个解决方案很有帮助。
  • 如果这有所作为,我会感到惊讶。我强烈怀疑你做了其他事情来解决这个问题。
【解决方案2】:

鉴于该脚本:

#!/bin/bash
#Simple array
array=(1 2 3 4 5)

echo ${array[*]}

并假设:

  • 它位于您当前目录中名为array.sh 的文件中;
  • 你已经完成了chmod +x array.sh;
  • 您在/bin/bash 中安装了足够新的bash 版本(您报告说您有4.3.8,这肯定是足够新的);
  • 你执行正确

那么这应该没有任何问题。

如果您通过键入来执行脚本

./array.sh

系统会关注#!/bin/bash这一行,并使用/bin/bash执行脚本。

如果您通过键入以下内容来执行它:

sh ./array.sh

然后它将使用/bin/sh 执行它。在 Ubuntu 上,/bin/sh 通常是指向 /bin/dash 的符号链接,/bin/dash 是一个类似 Bourne 的 shell,支持数组。这将为您提供您报告的准确错误消息。

用于执行脚本的 shell 不受您当前使用的 shell 或在 /etc/passwd 或等效项中配置为登录 shell 的 shell 的影响(除非您使用 source. 命令)。

在您自己的回答中,您说您通过使用 chsh 将默认登录 shell 更改为 /bin/bash 解决了问题。这本身不应该有任何影响。 (无论如何,/bin/bash 是 Ubuntu 上的默认登录 shell;您之前是否将其更改为其他内容?)

一定是你在不知不觉中将你使用的命令从sh ./array.sh更改为./array.sh

尝试运行sh ./array.sh,看看是否出现同样的错误。

【讨论】:

    【解决方案3】:

    而不是使用 sh 来运行脚本,

    尝试以下命令:

    bash ./array.sh
    

    【讨论】:

    • 脚本已经有#!/bin/bashshebang 的全部意义在于您可以直接执行命令而无需指定如何执行。只需使用./array.sh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多