変数を一致させて配列から値を抽出します。

変数を一致させて配列から値を抽出します。

スクリプトは、ユーザー入力に応じて配列に格納されているさまざまな値をエコーし​​ます。ただし、出力が正しくないため、誤った値がエコーされます。

AA_P=/root/run_Scripts/AA_P_run.sh
AA_S=/root/run_Scripts/AA_S_run.sh

read -p "Enter 'P' or 'S'"$'\n' P_S

read -p "How many runs?"$'\n' runs

script="AA${P_S}"
echo $script

echo ""
declare -A Arr=( [AAP]=$AA_P [AAS]=$AA_S )

for key in ${Arr[@]}; do
    if [[ $key == $nScript ]]; then
        key="${Arr[$key]}"
    fi

    while [ $runs -gt 0 ]; do
        echo $key 
        (( runs=runs-1 ))
    done
done
exit 

入力が「S」と「3」の場合、出力は次のようになります。

AAS

/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh

スクリプトが '/root/run_Scripts/ をエコーし​​ないのはなぜですか?AA_S_run.sh

ベストアンサー1

${assoc[@]}次に展開価値連想配列の場合(周囲に引用符を忘れてしまったため分割+グローブの影響を受ける) リスト用、ksh93のように"${!assoc[@]}"構文をコピーする必要があります。bashbash

また、キーが見つかるまでキーを繰り返すのはなぜですか?ただし:

while ((runs--)); do
 printf '%s\n' "${Arr[$nScript]}"
done

その他の注意事項:

  • $nScript配列のキーにあることを確認するには、次のようにします。 (if [[ -n $nScript && -n ${Arr[$nScript]+set} ]]; then...連想配列がnullキーをブロックするという事実を説明するためにnullでないかどうかについての追加テスト$nScriptbash
  • $nScriptスクリプトに設定されていないようです($scriptはい)。
  • [[ $a == $b ]]変数が保存されたパターン$a(つまり構文のソース)と一致するかどうかをテストします。とが等しいことを確認するには、が必要です。$bbashksh[[...]]$a$b[[ $a == "$b" ]]

1 zshの構文をコピーした場合に該当します"${(k@)assoc}"

おすすめ記事