【问题标题】:How to use "\" when spliting strings?拆分字符串时如何使用“\”?
【发布时间】:2019-08-21 13:43:47
【问题描述】:

我正在使用 bash 脚本。在其中,我需要拆分一个基于以下分隔符的字符串:“\r\n”。我尝试了以下方法:

MY_STRING='firsttext\r\nsecondtext\r\nthirdtext'
IFS='\r\n' read -ra my_array <<< "$MY_STRING"

但是不起作用,它用字母'r'而不是'\r\n'分割字符串。是否需要用其他方式表示分隔符?

【问题讨论】:

  • 你从哪里得到MY_STRING?我不应该是MY_STRING =$'firsttext\r\nsecondtext\r\nthirdtext' 吗?
  • IFS 是可能的单字符字段分隔符列表,而不是单个多字符分隔符。此外,MY_STRING 目前不包含回车或换行;它包含文字反斜杠。

标签: bash shell


【解决方案1】:

最简单的方法是使用参数替换将多字符分隔符转换为单个字符(IFS 中的一个字符):${param//pattern/replacement}(其中两个斜杠表示全局搜索)

my_string="firsttext\r\nsecondtext\r\nthirdtext"
read -ra my_array <<< "${my_string//\\r\\n/ }"
declare -p my_array

输出:

declare -a my_array='([0]="firsttext" [1]="secondtext" [2]="thirdtext")'

顺便说一句,大写的变量名应该为环境变量和其他特殊变量保留。

【讨论】:

  • 如果文本中有空格,最好将 \\r\\n 替换为空格。比如${my_string//\\r\\n/'$'},然后是IFS='$' read -ra。甚至可以使用不可读的字符,例如$'\01' byte。
  • @KamilCuk 好点。由于 OP 的文本不包含任何其他分隔符,我不想过于复杂。
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 2013-01-14
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多