ここで奇妙なエラーが発生します。次の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
標準配列としてインデックスに含めることができる唯一の項目は整数であり、算術拡張を実行できるため、拡張する整数ではなく[ ... ]
/誤った演算のために窒息します。