为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花如伊 2019-11-30 14:37:11
我编写了一个在bash(v 4)中使用关联数组的脚本。在使用的本机上,它运作良好4.1.5(1)-release。在生产机上,使用4.1.0(1)-release以下行声明assoc数组失败:declare -A uniqjars消息:/script.sh: line 11: declare: -A: invalid optiondeclare: usage: declare [-afFirtx] [-p] [name[=value] ...]我的印象是这是bash 4的一项常规功能?在生产机器上使用bash的人中,它讨论了使用方法,-A因此我认为它应该可以工作。关联数组是使用创建的 。declare -A name我可以通过打印出的值来确认脚本使用的是正确的bash版本echo 'bash -version。我可能做错了什么?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

确保在外壳程序脚本(#!/bin/bash或任何其他内容)顶部作为解释程序调用的bash的版本也为版本4。如果正在执行以下操作:


bash --version

并给您v4,请执行a which bash检查其位置。


查看完整回答
反对 回复 2019-11-30
?
皈依舞

TA贡献1851条经验 获得超3个赞

如果您想将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


查看完整回答
反对 回复 2019-11-30
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

在使用Homebrew安装更新的Bash之后,以下似乎是macOS上的典型场景:

  • /bin/bash 是旧的Bash,3.2

  • /usr/local/bin/bash 是了解关联数组(4.0或更高版本)的新Bash

  • type 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。


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 906 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信