Bash 脚本问题:“声明:未找到”

Ash*_*ame 26 bash scripts

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

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

declare -a RESPONSE
RESPONSE=($RESULT)
Run Code Online (Sandbox Code Playgroud)

它还说(是出乎意料的,但我想这是由于第一个错误而出现的。值得一提的是,当我直接输入declare时效果很好。

declare | grep USER 显示

USER=ashfame
USERNAME=ashfame
           values="$SVN_BASH_USERNAME";
Run Code Online (Sandbox Code Playgroud)

那么,这里有什么问题吗?

enz*_*tib 30

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

VAR=(list) 
Run Code Online (Sandbox Code Playgroud)

用于初始化数组。


int*_*ted 11

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

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

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

declare内置是一个bash的许多扩展到Bourne shell脚本规范; dash仅实现该规范而无需扩展。

  • @Ashfame 使用 `sh script` 您正在运行带有参数 `script` 的命令 `sh`,这使得 sh 读取并执行该文件中的命令。shebang 不是由 sh 读取的,它以 `#` 开头,因此它被视为注释。如果您改为运行`./script`,那么内核将读取shebang,在您的情况下是`#!/bin/bash`,因此它执行`/bin/bash ./script` (2认同)