配列の最初の要素を確認する方法

配列の最初の要素を確認する方法

次の配列ループを設定しました。文字列を繰り返しながら、各項目が文字と一致することを確認し、それに応じていくつかの変数を設定します。

#!/usr/bin/env bash
IN="ItemName -a -b"

itemA=0
itemB=0
itemI=0

while IFS=' -' read -ra ARR; do
    for x in "${ARR[@]}"; do
        echo "x = $x"
        y=${x:0:1}
        echo "y = $y"
        case $y in
            "a") itemA=1 ;;
            "b") itemB=1 ;;
            "I") itemI=1 ;;
        esac
    done
done <<< "$IN"

echo "itemA is $itemA
echo "itemB is $itemB"
echo "itemI is $itemI" 

ただし、最初の要素( "itemName")については、ケースステムの一部として識別されないように別々に設定する必要があります。理想的には、次のように仕上げたいです。

itemName is ItemName
itemA is 1
itemB is 1
itemI is 0

最初の要素を確認する方法は?頑張った

if [ ${ARR[0]} ] ; then
    itemName=$x
else
 . . . 
fi  

しかし、最終的に変数は設定されません。

ベストアンサー1

whileなぜループを使用したいのかわかりません。それを放すとwhile問題がなくなります。

#!/usr/bin/env bash
IN="ItemName -a -b"
itemA=0
itemB=0
itemI=0

## Read the array, no loop required
IFS=' -' read -ra ARR <<<"$IN"
## Save the 1st element as itemN
itemN=${ARR[0]}
## Remove itemN from the array
unset ARR[0]
## Now loop over the rest
for x in "${ARR[@]}"; do
    y=${x:0:1}
    case $y in
        "a") itemA=1 ;;
        "b") itemB=1 ;;
        "I") itemI=1 ;;
        esac
done

echo "itemN is $itemN"
echo "itemA is $itemA"
echo "itemB is $itemB"
echo "itemI is $itemI" 

上記のスクリプトを実行すると、次のものが印刷されます。

itemN is ItemName
itemA is 1
itemB is 1
itemI is 0

おすすめ記事