为什么在通过回声运行时反斜杠会消失?

时间:2012-04-20 00:15:40

标签: bash echo backslash

我有这样的代码,用于处理CSV文件:

#!/bin/bash
while read line
do
    variable=$(echo $line | awk -F, '{print $2}')
    echo $variable
 done < ./file.csv

如果CSV文件包含任何\,则在运行此命令时,输出文本不会显示\

如何确保不删除\

2 个答案:

答案 0 :(得分:15)

此行为的原因是read内置使用\作为转义字符。 -r标志禁用此行为。

所以,这应该有效:

while read -r line
  variable=$(echo $line | awk -F, '{print $2}')
  echo $variable
done < ./file.csv

您还应该"..."围绕$(...)和变量等内容,例如

variable="$(command)"
echo "$variable"

答案 1 :(得分:1)

bash的手册页可以说明read

  

反斜杠字符(\)可能是                 用于删除下一个字符读取的任何特殊含义                 并继续延续。