arrays - 如何将包含字符 "\n"的多行字符串拆分为 bash 中的字符串数组?

标签 arrays string bash escaping

<分区>

我有一个字符串,格式如下:

I'm\nNed\nNederlander
I'm\nLucky\nDay
I'm\nDusty\nBottoms

我想将其逐行移动到字符串数组中,这样:

$ echo "${ARRAY[0]}"
I'm\nNed\nNederlander

$ echo "${ARRAY[1]}"
I'm\nLucky\nDay

$ echo "${ARRAY[2]}"
I'm\nDusty\nBottoms

但是,我遇到了字符串本身中的“\n”字符的问题。它们在字符串中表示为两个单独的字符,反斜杠和“n”,但是当我尝试进行数组拆分时,它们被解释为换行符。因此,使用 IFS 进行典型的字符串拆分是行不通的。

例如:

$ read -a ARRAY <<< "$STRING"
$ echo "${#ARRAY[@]}"   # print number of elements
2

$ echo "${ARRAY[0]}"
I'mnNednNederla

$ echo "${ARRAY[1]}"
der

最佳答案

默认情况下,read 内置函数允许\转义字符。要关闭此行为,请使用 -r 选项。您很少会发现不想使用 -r 的情况。

string="I'm\nNed\nNederlander
I'm\nLucky\nDay
I'm\nDusty\nBottoms"

arr=()
while read -r line; do
   arr+=("$line")
done <<< "$string"

为了在一行中执行此操作(就像您尝试使用 read -a),实际上需要 bash v4 或更高版本中的 mapfile:

mapfile -t arr <<< "$string"

关于arrays - 如何将包含字符 "\n"的多行字符串拆分为 bash 中的字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746071/

相关文章:

bash - 防止变量替换后通配

c - 如何读取文件并验证输入?

ruby - 如何在ruby中制作动态多维数组?

c++ - 使用 wcsncpy_s 复制字符串时缓冲区太小

linux - 搜索 x 天未访问的文件

bash - 仅按名称列出 Gitlab 运行器

php - 如何更改 PHP 中特定关联数组的值?

arrays - 在 Swift 中制作一系列进展系列的简单方法,如 1,3,5,

string - 字符串的 IDA Pro 脚本

javascript - 在Javascript中将带方括号的字符串转换为数组或列表