在bash中使用IFS使用\ r \n拆分字符串

Jit*_*tra 1 bash ifs

我想在bash中拆分字符串包含\ r \n但是回车符和\n给出了问题.任何人都可以给我提示不同的IFS吗?我也试过IFS ='|''.

输入:

projects.google.tests.inbox.document_01\r\nprojects.google.tests.inbox.document_02\r\nprojects.google.tests.inbox.global_02
Run Code Online (Sandbox Code Playgroud)

码:

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
Run Code Online (Sandbox Code Playgroud)

预期:

projects.google.tests.inbox.document_01
projects.google.tests.inbox.document_02
projects.google.tests.inbox.global_02
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

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"
Run Code Online (Sandbox Code Playgroud)

注意:

  • 字符串定义为string=$'foo\r\n',而不是string="foo\r\n".后者不会在您的变量中放置实际的CRLF序列.有关此语法的说明,请参阅bash-hackers维基上的类似ANSI C的字符串.
  • ${line%$'\r'}是一个参数扩展line,如果存在,则从变量内容的末尾剥离文字回车.
  • BashFAQ#1中详细描述了逐行读取输入流(在此使用)的实践.与迭代不同for,它不会尝试将数据扩展为globs.