1
から、配列のインデックスを取得し、配列を参照し、変数の名前からその値を取得することができますことを発見:同じアプローチを使用している場合、私は興味があった名前(ちょうど楽しみのために)バッシュの中を出し抜く
[email protected]:~$ ARR=(one two);
[email protected]:~$ ARRAYINDIRECT="ARR[@]"
[email protected]:~$ echo "${!ARRAYINDIRECT}"
one two
配列のインデックスも取得できます。通常、私はそうすることでそれをします:
[email protected]:~$ ARR=(one two); echo "${!ARR[@]}"
0 1
しかし、正しい構文を見つけることができません。ここに私が試したいくつかの方法があります:
[email protected]:~$ ARR=(one two); ARRAYINDIRECT="ARR[@]"; echo "${!!ARRAYINDIRECT}"
bash: !ARRAYINDIRECT}: event not found
ARR=(one two); ARRAYINDIRECT="!ARR[@]"; echo "${!ARRAYINDIRECT}"
bash: !ARR[@]: event not found
# Increasingly desperate attempts...
[email protected]:~$ ARR=(one two); ARRAYINDIRECT="\!ARR[@]"; echo "${!ARRAYINDIRECT}"
[email protected]:~$ ARR=(one two); ARRAYINDIRECT="ARR[@]"; echo "${!${!ARRAYINDIRECT}}"
bash: ${!${!ARRAYINDIRECT}}: bad substitution
[email protected]:~$ ARR=(one two); ARRAYINDIRECT="ARR[@]"; echo "${\!!ARRAYINDIRECT}"
bash: !ARRAYINDIRECT}: event not found
[email protected]:~$ ARR=(one two); ARRAYINDIRECT="ARR[@]"; echo "${!\!ARRAYINDIRECT}"
bash: ${!\!ARRAYINDIRECT}: bad substitution
質問:それは名前で参照した後、配列のインデックスの配列を取得することは可能でしょうか?あなたはBASH 4.2 +を使用している場合
@wjandreaすることができますはい、anubhavaの答えを!最初の文の最初の行の最初の単語から述べたように、* Bashで楽しんでいる*ので、そうすることで何も教えてくれません。あなたが有効なユースケースを望むなら、配列を関数に名前で渡すことは、それらを操作するためのものです( 'local'変数でも動作します!)ので、配列の要素を反復してマッピングするなら、新しい配列にインデックス構造を残したかったのです。実際、名前で渡すと、インデックスベースの操作には最適です。 –