Bash 4关联数组:错误“声明:-A:无效选项”

我编写了一个在bash(v 4)中使用关联数组的脚本。


在使用的本机上,它运作良好4.1.5(1)-release。


在生产机上,使用4.1.0(1)-release以下行声明assoc数组失败:


declare -A uniqjars

消息:


/script.sh: line 11: declare: -A: invalid option

declare: usage: declare [-afFirtx] [-p] [name[=value] ...]

我的印象是这是bash 4的一项常规功能?


在生产机器上使用bash的人中,它讨论了使用方法,-A因此我认为它应该可以工作。


关联数组是使用创建的 。declare -A name


我可以通过打印出的值来确认脚本使用的是正确的bash版本echo 'bash -version。


我可能做错了什么?


繁花如伊
浏览 909回答 3
3回答

守候你守候我

确保在外壳程序脚本(#!/bin/bash或任何其他内容)顶部作为解释程序调用的bash的版本也为版本4。如果正在执行以下操作:bash --version并给您v4,请执行a which bash检查其位置。

皈依舞

如果您想将chars作为bash v3的数组索引使用,这是一种解决方法:array=(    'hello::world.'    'nice::to meet you')for index in "${array[@]}" ; do    KEY="${index%%::*}"    VALUE="${index##*::}"    echo "$KEY - $VALUE"done输出:hello - world.nice - to meet you

繁华开满天机

在使用Homebrew安装更新的Bash之后,以下似乎是macOS上的典型场景:/bin/bash 是旧的Bash,3.2/usr/local/bin/bash 是了解关联数组(4.0或更高版本)的新Bashtype bash指向/usr/local/bin/bash并且bash --version是新的(因为它解析为/usr/local/bin/bash --version)但是,#!/bin/bash运行带有shebang行的脚本./script将使用旧的Bash(问题中的方案)。解决方案是:使用以下命令调用脚本bash script:将使用新的Bash。缺点:您总是必须这样称呼它。将shebang行更改为#!/usr/local/bin/bash。缺点:在许多系统上,没有Bash /usr/local/bin且您的脚本不再可移植。将shebang行更改为#!/usr/bin/env bash。这将使用第一个bash在你的PATH,这应该是新的。这是非常可移植的。唯一的缺点是您不完全知道将执行哪个Bash。
打开App,查看更多内容
随时随地看视频慕课网APP