我正在尝试将包含每个字符串行的数组作为元素...
stringy=$(ls -l | awk '{print$3,$6,$7,$8,$9}'| grep "$USER")
declare -a myarray=()
IFS="\n" read myarray <<< "$stringy"
echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"
for line in "${myarray[@]}"; do
echo "$line"
done
字符串看起来像这样:
brunor Nov 17 17:38 22735
brunor Nov 17 15:38 5391
brunor Nov 17 15:38 5405
brunor Nov 17 15:38 5444
(...)
即使循环,代码也只输出第一个元素(0):
>brunor Nov 17 17:38 22735
>
>
>brunor Nov 17 17:38 22735
答案 0 :(得分:1)
主要问题是您将myarray
读作常规变量,而不是数组。请改用readarray
:
readarray -t myarray <<< "$stringy"
其他问题包括:
IFS
被设置为字母“n”和反斜杠,而不是换行符read
默认为阅读单行而不管IFS
echo
检查变量内容是一种不好的方法,因为它不明确(declare -p myarray
会立即显示问题)