\ t Tab在bash脚本中丢失

时间:2016-08-25 09:54:09

标签: bash sed echo cut

我正在bash脚本中逐行读取文本文件。我正在阅读的文本文件是一个标签分隔的csv - 但是当我尝试剪切读取行时,它不起作用,似乎\ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ / p>

下面的代码不是我最后要做的 - 我还没有实现代码的实际工作量,直到可以可靠地读取数据。

for (( currlineno=2 ; $currlineno <= $maxlines ; currlineno++ )); do
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv )
echo $currline |cut -f2
done

现在当我改变下面的两行时,它可以正常工作

for (( currlineno=2 ; $currlineno <= $maxlines ; currlineno++ )); do
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv |tr '\t' ';')
echo $currline |cut -f2 -d ';'
done

但我不能这样做因为我的文本文件也包含';' ','和'。'在田野里。 Tab是我唯一可以接受的选项,因为我的字段永远不会包含它。

1 个答案:

答案 0 :(得分:1)

那是因为你没有对你的变量进行双重引用。

tabbed=$'a\tb'
echo $tabbed : "$tabbed"

当bash看到引号之外的变量时,它会在其内容上应用单词拆分,而echo只输出由空格分隔的参数。双引号使值成为一个参数,即使它包含空格,换行符等。