Mac BigSurのBashスクリプト構文エラー:無効な算術演算子

Mac BigSurのBashスクリプト構文エラー:無効な算術演算子

ここで奇妙なエラーが発生します。次のjson構造があります。

BACKUP_REPOS='''
[
    {"name":"my.server1", "hash":"server1-hash"},
    {"name":"my.server2", "hash":"server2-hash"},
    {"name":"my.server3", "hash":"server3-hash"}
]
'''

私がやろうとしているのは、jq次の機能を使用して選択可能なメニューを生成することです。

# generate the server menu
server_menu( ) {

    # hold some arrays
    declare -a _name _hash;

    while read -r _server _pw; do

        # hold the selected item
        _name[$_server]=$_server;
        _hash[$_server]=$_pw;

    # end the loop generation
    done < <( jq -rc '.[] | "\(.name) \(.hash)"' <<< "$BACKUP_REPOS" )

    # now loop the resultset
    select _server in "${!_name[@]}"; do 
        [ -n "$_server" ] && break;
    done;

    # return the server and hash
    SELECTED_SERVER=${_name[$_server]};
    SELECTED_HASH=${_hash[$_server]};

}

Ubuntu 18+では正常に動作しますが、Mac BigSur端末ではエラーが発生します。エラーは次のとおりです。syntax error: invalid arithmetic operator (error token is ".server1") on line 82完全なコードファイルには次の行があります。_name[$_server]=$_server;

ここで私はどこで間違っていますか?この時点で唯一の関心事は、私のMacでこのスクリプトを実行することです。複数のコピーを保存できます。

ティア

ベストアンサー1

macOSに付属のデフォルトのbashバージョンでは、不可能な連想配列を使用したいようです。したがって、これを行うにはbashをバージョン4以降に更新する必要がありますが、次の点も変更する必要があります。

declare -a _name _hash

到着

declare -A _name _hash

標準配列としてインデックスに含めることができる唯一の項目は整数であり、算術拡張を実行できるため、拡張する整数ではなく[ ... ]/誤った演算のために窒息します。

おすすめ記事