# Create array
arrayLong=(one two three four)
for element in "${arrayLong[@]}"
do
echo "$element"
done
echo "${#arrayLong[@]}"
出力:
one
two
three
four
4
それから:
# Make new array with only first half of values
arrayShort=("${arrayLong[@]:0:2}")
for element in "${arrayShort[@]}"
do
echo "$element"
done
echo "${#arrayShort[@]}"
これの出力は次のとおりです。
one two
1
私の短い配列が実際に配列ではないのはなぜですか?これはただ一つの要素です。配列に結果がいっぱいになったら、配列を分割する方法は?
私のバッシュバージョンはGNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
ベストアンサー1
IFS
使用後に自動的に初期化されないかわかりませんでした。前のコードでは、IFS=$'\n'
元の値を保存せずに設定しました。これが私がしなければならないことです:
# set Internal Field Separator to new line only to split files
oIFS="$IFS"
IFS=$'\n'
array=(${all_files})
# Return IFS to initial value
IFS="$oIFS"
IFS
特定の瞬間の内容を再確認するには、printf "%q\n" "$IFS"
デフォルト値はです。$' \t\n'
助けてくれた@MiniMaxと@Jesse_bに感謝します。