スクリプトは、ユーザー入力に応じて配列に格納されているさまざまな値をエコーします。ただし、出力が正しくないため、誤った値がエコーされます。
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[@]}"
構文をコピーする必要があります。bash
bash
また、キーが見つかるまでキーを繰り返すのはなぜですか?ただし:
while ((runs--)); do
printf '%s\n' "${Arr[$nScript]}"
done
その他の注意事項:
$nScript
配列のキーにあることを確認するには、次のようにします。 (if [[ -n $nScript && -n ${Arr[$nScript]+set} ]]; then...
連想配列がnullキーをブロックするという事実を説明するためにnullでないかどうかについての追加テスト$nScript
)bash
$nScript
スクリプトに設定されていないようです($script
はい)。[[ $a == $b ]]
変数が保存されたパターン$a
(つまり構文のソース)と一致するかどうかをテストします。とが等しいことを確認するには、が必要です。$b
bash
ksh
[[...]]
$a
$b
[[ $a == "$b" ]]
1 zshの構文をコピーした場合に該当します"${(k@)assoc}"
。