【问题标题】:Shell Bash - Split Multilne String into ArrayShell Bash - 将多行字符串拆分为数组
【发布时间】:2018-05-01 14:57:33
【问题描述】:

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

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

【问题讨论】:

  • 你确定这个“;”在“做”之前应该在那里?看起来像 ;确保循环只运行一次。

标签: arrays linux bash shell


【解决方案1】:

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

readarray -t myarray <<< "$stringy"

其他问题包括:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2016-01-27
    • 2015-08-28
    相关资源
    最近更新 更多