分割時に私のbash配列の長さが常に1であるのはなぜですか?

分割時に私のbash配列の長さが常に1であるのはなぜですか?
# 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に感謝します。

おすすめ記事