bash - Bash:如何在“\ n”上将字符串拆分为可迭代的字符串系列?
问题描述
如果我有一个字符串,如下所示:
:x: **Line 1**\n`Line 2`
如何将其拆分为由“\n”分隔的 2 个字符串(在本例中),以便可以按如下方式遍历它:
for LINE in $STRING
do
echo "Line: $LINE"
done
Line: :x: **Line 1**
Line: `Line 2`
我从这里尝试过的所有其他示例似乎都没有这样做,它们只会一次性打印出整个字符串。
例如,我试过这个:
STRING=":x: **Line 1**\n\`Line 2\`"
while IFS= read -r line; do
echo "Line: $line"
done <<< "$STRING"
我得到:
Line: :x: **Line 1**\n`Line 2`
解决方案
将文字\n
转换为换行符并在while
循环中使用:
STRING=":x: **Line 1**\n\`Line 2\`"
while IFS= read -r line; do
echo "Line: $line"
done < <(sed 's/\\n/\n/g' <<< "${STRING}")
或者使用这个printf
想法(包括 CharlesDuffy 的评论):
while IFS= read -r line
do
echo "Line: $line"
done < <(printf '%b\n' "${STRING}")
注意:添加额外\n
内容以确保第二行正确终止,以便while
循环可以读取它。
两者都应该生成:
Line: :x: **Line 1**
Line: `Line 2`
推荐阅读
- c# - 控制器根据模型变量删除表中的行
- java - 为什么我的计时器不等待设置的时间?怎么修?
- reactjs - 反应:在没有css的情况下删除焦点上的按钮轮廓
- ruby - 不确定 .include 方法 - 需要帮助调试
- python - “错误打开终端:未知。” 通过 Python 在 SSH 服务器中运行命令时出错
- vba - 从 VBA for Word 中的多个样式段落的开头删除字符
- amazon-web-services - Athena 如何知道如何对您的数据进行分区?
- c# - 为什么我的结果没有像我期望的那样写入控制台?
- android - 从 MainActivity 范围调用函数
- reactjs - TypeError:this.props.decrementCount 不是函数