我有一个运行良好的脚本,但是今天运行它时,它显示declare: not found
。我正在使用 bash shell,并且脚本开头的路径是正确的。
我的脚本中标记的两行如下:
declare -a RESPONSE
RESPONSE=($RESULT)
它还说(
是意外的,但我猜这是因为第一个错误而出现的。值得一提的是,当我直接输入声明时,它工作正常。
declare | grep USER
节目
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
那么,这里出了什么问题?
答案1
您使用的是sh
而不是bash
?sh
(链接到dash
)不支持declare
关键字,也不支持语法
VAR=(list)
用于初始化数组。
答案2
我怀疑你的“shebang”行(文件的可选第一行)引用的是sh
而不是bash
。应该是
#!/bin/bash
对于 bash 脚本。如果脚本的第一行是
#!/bin/sh
那么这将表明要使用严格兼容 Bourne 的 shell;在 Ubuntu 中,dash
使用的是。在许多其他发行版中,这不会造成问题,因为它们链接/bin/sh
到/bin/bash
;然而,ubuntu 链接到,/bin/dash
以便允许系统脚本更快地运行。
内置命令是Bourne shell 脚本规范的众多扩展declare
之一;仅实现该规范而无扩展。bash
dash
答案3
如何重现上述错误:
我使用的是 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
答案4
请尝试在命令行中运行脚本/bin/bash
,如果sh
(:
代替 :
sh脚本.sh
尝试 :
/bin/bash脚本.sh