我想在 bash 中拆分包含 \r\n 的字符串,但回车符和 \n 会出现问题。谁能给我关于不同 IFS 的提示?我也尝试过 IFS=' |\' 。
input:
projects.google.tests.inbox.document_01\r\nprojects.google.tests.inbox.document_02\r\nprojects.google.tests.inbox.global_02
Code:
IFS=$'\r'
inputData="projects.google.tests.inbox.document_01\r\nprojects.google.tests.inbox.document_02\r\nprojects.google.tests.inbox.global_02"
for line1 in ${inputData}; do
line2=`echo "${line1}"`
echo ${line2} //Expected one by one entry
done
预期的:
projects.google.tests.inbox.document_01
projects.google.tests.inbox.document_02
projects.google.tests.inbox.global_02
inputData=$'projects.google.tests.inbox.document_01\r\nprojects.google.tests.inbox.document_02\r\nprojects.google.tests.inbox.global_02'
while IFS= read -r line; do
line=${line%$'\r'}
echo "$line"
done <<<"$inputData"
Note:
- 该字符串定义为
string=$'foo\r\n'
, not string="foo\r\n"
。后者不会将实际的 CRLF 序列放入变量中。看类似 ANSI C 的字符串 http://wiki.bash-hackers.org/syntax/quoting#ansi_c_like_strings在 bash-hackers' wiki 上了解此语法的描述。
-
${line%$'\r'}
is a 参数扩展 http://wiki.bash-hackers.org/syntax/pe它从变量内容的末尾去除文字回车符line
,如果存在的话。
- 逐行读取输入流(此处使用)的实践在Bash 常见问题解答#1 http://mywiki.wooledge.org/BashFAQ/001。与迭代不同
for
,它不会尝试将您的数据扩展为全局数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)