Bash 脚本的问题:“declare: not found”

Bash 脚本的问题:“declare: not found”

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

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

declare -a RESPONSE
RESPONSE=($RESULT)

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

declare | grep USER节目

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

那么,这里出了什么问题?

答案1

您使用的是sh而不是bashsh(链接到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之一;仅实现该规范而无扩展。bashdash

答案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

相关内容