Bash脚本问题:’declare:not found’

我有一个运行良好的脚本,但是今天我运行它时declare: not found 。 我在脚本的开头使用bash shell和路径是正确的。

我的脚本中有两个标记的行如下:

 declare -a RESPONSE RESPONSE=($RESULT) 

它还说(出乎意料,但我想这是因为第一个错误而出现。值得一提的是当我输入声明直接工作正常。

declare | grep USER declare | grep USER显示

 USER=ashfame USERNAME=ashfame values="$SVN_BASH_USERNAME"; 

那么,这里有什么不对吗?

你用sh而不是bash吗? sh (链接到dash )不支持declare关键字,也不支持语法

 VAR=(list) 

用于初始化数组。

我怀疑你的“shebang”行(文件的可选第一行)是引用sh而不是bash 。 它应该是

 #!/bin/bash 

对于bash脚本。 如果脚本的第一行是

 #!/bin/sh 

然后这表明将使用严格的bourne兼容shell; 在Ubuntu的情况下,使用dash 。 在许多其他发行版中,这不会导致问题,因为它们将/bin/sh链接到/bin/bash ; 但是ubuntu链接到/bin/dash以便允许系统脚本更快地运行。

declare内置是bash对Bourne shell脚本规范的许多扩展之一; dash只是实现了没有扩展的规范。

如何重现上述错误:

我正在使用Ubuntu 14.04 64位。 将此代码放在一个文件中:

 #!/bin/sh declare -i FOOBAR=12; echo $FOOBAR; 

像这样运行:

 el@apollo:~$ ./06.sh ./test.sh: 2: ./test.sh: declare: not found 

要解决此问题,请执行以下操作:

 #!/bin/bash declare -i FOOBAR=12; echo $FOOBAR; 

打印:

 el@apollo:~$ ./06.sh 12 

我有同样的问题,然后我记得你需要分配正确的权限来执行shell脚本。

更改脚本的权限,例如:

 chmod 755 script.sh 

尝试在命令行中使用/bin/bash运行脚本,如果sh (:

代替 :

     sh script.sh

试试:

     / bin / bash script.sh