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