# 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
为什么我的短数组实际上不是一个数组?这只是一个元素。当数组中的结果已满时,如何拆分数组?
我的 bash 版本是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 对此提供的帮助。