declare -A 在 Apple M1 上使用 Bash 版本 5 返回无效选项

问题描述 投票:0回答:1

我在 stackoverflow 上读过类似的文章,但没有一篇文章解决了我的具体问题,我真的很感激任何帮助,因为我真的在这个问题上失去了理智。

  1. 我有一个使用 shebang
    #!/usr/bin/env bash
    的脚本,我已经使用 echo 检查了脚本内部的 bash 版本,它确实是我通过 HomeBrew 下载的
    bash version 5
    - 我读到我不需要使用路径
    /opt/homebrew/bin/bash
    这是我的 bash 所在的位置 [apple M1 cpu],因为在点 1 中粘贴了 shebang。
  2. 我的 vsc 终端正在使用 zsh。
  3. 出于某种原因,即使 4 之后的 bash 版本应该支持
    declare -A
    ,我还是返回了以下错误:
    declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
  4. 我的脚本如下:
#!/usr/bin/env bash

echo "BASH_VERSION=$BASH_VERSION"

# save current branches in packages as `composer install` may change them to master
SCRIPTPATH="$( cd "$( /usr/bin/dirname "$0" )" && pwd )"

DIR=`pwd`

declare -A BRANCHES

DIR=`pwd`

for d in */; do

    cd "$DIR/$d"
    BRANCH=`git rev-parse --abbrev-ref HEAD`

    if [ "${BRANCH}" != "master" ]; then
        BRANCHES[$d]="${BRANCH}"
    fi

done

返回的 bash 版本:

BASH_VERSION=5.1.16(1)-release

有什么建议吗?请告诉我您还需要哪些其他详细信息。另外,也许是声明关联数组的替代语法,也许我无法在初始化之前声明它们?

我也有一个关于此的后续问题。该脚本位于 docker 目录内 - 如果 docker 旨在使用虚拟 Linux 进行安装和实例 - 那么为什么我需要对我的 shell 脚本进行某些 macOS 支持的更改?

bash docker macos shell apple-m1
1个回答
0
投票

这取决于您如何运行脚本。

脚本中有以下行:

echo "BASH_VERSION=$BASH_VERSION"

如果您像

./myscript.sh
那样调用脚本,则 BASH_VERSION=v3 如果您调用它
bash ./myscript.sh
,则 BASH_VERSION=v5

所以,我要做的就是跑步

bash ./myscript

© www.soinside.com 2019 - 2024. All rights reserved.