未找到 Bash 中的数组 [重复]

Posted

技术标签:

【中文标题】未找到 Bash 中的数组 [重复]【英文标题】:Array in Bash Not Found [duplicate] 【发布时间】:2011-02-16 05:31:39 【问题描述】:

我试图在 bash 中声明一个数组,但是当代码运行时它说它找不到该数组。我尝试以几种不同的方式写出数组的声明,但似乎无论我如何尝试声明它,我都无法让它工作。我最初试图这样声明它:

candidate[1]= 0
candidate[2]= 0
candidate[3]= 0

返回的错误信息是:

votecalculation.sh: 13: candidate[1]=: not found
votecalculation.sh: 14: candidate[2]=: not found
votecalculation.sh: 15: candidate[3]=: not found

在此之后,我尝试了另一种在网上找到的解决方案:

ARRAY=( 'can1' 'can2' 'can3' )

使用时会返回此错误:

votecalculation.sh: 12: Syntax error: "(" unexpected

我是 Bash 新手,对数组感到非常困惑。是否有一些特定的方式我需要声明一个数组或者我只是完全错误地这样做?

【问题讨论】:

好的,最后我找到了问题所在。即使文件的头部是#!/bin/bash,文件名也以.sh 结尾。在将文件扩展名更改为 .bash 并在终端中使用“bash votecalculations.bash”运行它之后,它就可以工作了。再次感谢大家的帮助! 仅供参考,文件扩展名无关紧要......您可以将其保留为.sh,甚至根本没有文件扩展名,只要您使用 bash 运行它。 【参考方案1】:

它可能不喜欢等号后面的空格。

其他一些想法:

确保您实际使用的是 bash,而不是 sh/dash。

您可以使用declare -a varname 将变量显式声明为数组

【讨论】:

它说当我尝试声明数组时没有找到声明......这太奇怪了,程序的其余部分在推出错误后运行。 你确定你在运行 bash 吗?【参考方案2】:
 #!/bin/bash

 myarray[0]=hello
 myarray[1]=world

 echo "$myarray[0]"
 echo "$myarray[1]"

将其保存到文件中的helloworld.bashchmod +x

使用执行 ./helloword.bash

【讨论】:

它也没有找到那些,并且对于 echo 它说这是一个“错误的替换” 你有一些奇怪的 bash 实现吗?你是怎么调用脚本的? 我想我不会。我使用“sh votecalculations.sh”从终端调用脚本 尝试 ./votecalculations.sh 或 . ./votecalculations.sh 但先用我粘贴的代码尝试一下,以防您的代码中有其他错误【参考方案3】:

尝试删除空格:

candidate[1]=0
candidate[2]=0

等等。我自己不是这方面的专家,但我认为 bash 需要将整个赋值表达式识别为一个单词,因此其中不能有空格。

【讨论】:

votecalculation.sh:13:candidate[1]=0:未找到 votecalculation.sh:14:candidate[2]=0:未找到 votecalculation.sh:15:candidate[3]=0 : not found 我试过没有空格,上面是我尝试没有空格时得到的错误。【参考方案4】:

我遇到了同样的问题。我尝试使用 ./my_script.s 调用我的脚本,使用 . ./my_script.sh 我还尝试了“bash my_script.sh”和“sh my_script.sh”。我总是收到相同的消息:“my_array[1]: command not found”。

然后我看到了 Chris AtLee 关于 bash 不喜欢等号后面的空格的评论。

我之前代码中的确切行

my_array[1] = 34
my_array[2] = 57

我删除了等号前后的空格。

my_array[1]=34
my_array[2]=57

然后,我只是在终端中尝试了以下操作,并且不再有错误消息。

$ my_script.sh

注意:Bash 不喜欢变量定义中的空格!

希望这可以帮助像我这样的其他初学者!

【讨论】:

【参考方案5】:

在第一个中,等号后不应有空格。

candidate[1]=0
candidate[2]=0
candidate[3]=0

第二个看起来是正确的。你确定你的shell是bash吗?如果还没有,请尝试在脚本顶部添加适当的 hash-bang 行:

#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )

【讨论】:

我有那个确切的哈希爆炸,但它仍然不起作用。我已经在我的 Mac 和 Ubuntu 机器上尝试过代码。【参考方案6】:

如果你有正确的 shebang 并且你 chmod +x scriptname,你不需要使用 bash scriptname 启动脚本 - 你可以使用 ./scriptname 或者如果它所在的目录在你的 PATH 中,那么你可以简单地使用scriptname来启动它。

如果您将#!/bin/bash 作为您的shebang 并运行sh scriptname,那么shebang 将被命令行中选择的shell 覆盖。

文件名末尾有.sh.bash 没有特殊含义。这只是一些人喜欢的风格或偏好问题,因为它旨在指示脚本的类型(但仅限于用户,而不是系统)。

【讨论】:

【参考方案7】:

这是一个如何定义和迭代 bash 数组的示例

#!/bin/bash
test_array=(el1 el2 el3)
for value in "$test_array[@]";
do
  echo "$value"
done

输出:

el1
el2
el3

【讨论】:

【参考方案8】:

可能是,shebang的错误声明...... 请务必使用 #!/bin/bash 作为 shebang

【讨论】:

以上是关于未找到 Bash 中的数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将文件中的行读入Bash数组[重复]

从bash中的yaml数组获取值[重复]

bash中的关联数组不在循环内存储值[重复]

通过bash中的值访问数组的索引[重复]

bash数组语法和循环,请解释[重复]

Docker容器crontab未运行[重复]