如何正确地将制表符分隔的字符串(带空格)读入变量?

时间:2017-03-23 12:53:04

标签: shell unix

我尝试使用bash脚本将制表符分隔的行(也有空格)读入变量。我遇到的问题是尝试无法正确读取带空格的令牌。我尝试设置IFS =' \ t'但它没有用。

这是我尝试的代码 -

IFS='\t'
while read -r var1 var2 ;
do 
       echo "$var1"
       echo "$var2"
done < cat sample.txt

Sample.txt内容:

 variable1  This is variable2

预期产出:

 var1 = variable1
 var2 = This is variable2

不确定我错过了什么。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您必须使用IFS=$'\t'才能使其正常运行。

bash不要解释字符串文字中的转义序列。 $'somestring'是带有转义序列的字符串文字的语法。与'\t'不同,$'\t'实际上是一个标签。

  

来自man bash

     

$'string'形式的单词是专门处理的。这个词扩大了   to string,反斜杠转义字符被替换为   ANSI C标准。

此外,您不需要< cat file

#!/bin/bash

while IFS=$'\t' read -r var1 var2      
do
       echo "$var1"
       echo "$var2"
done < sample.txt