Shell Bash - 将Multilne字符串拆分为数组

时间:2017-11-17 18:44:08

标签: arrays linux bash shell

我正在尝试将包含每个字符串行的数组作为元素...

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

1 个答案:

答案 0 :(得分:1)

主要问题是您将myarray读作常规变量,而不是数组。请改用readarray

readarray -t myarray <<< "$stringy"

其他问题包括:

  • IFS被设置为字母“n”和反斜杠,而不是换行符
  • read默认为阅读单行而不管IFS
  • echo检查变量内容是一种不好的方法,因为它不明确(declare -p myarray会立即显示问题)