6

我有这样的代码,它处理一个 CSV 文件:

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

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

如何确保\不被删除?

4

3 回答 3

16

这种行为的原因是read内置函数\用作转义字符。该-r标志禁用此行为。

所以,这应该工作:

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

您还应该放置"..."诸如$(...)和变量之类的东西,例如

variable="$(command)"
echo "$variable"
于 2012-04-20T00:26:01.647 回答
1

的手册页bash有这样的说法read

反斜杠字符 (\) 可用于删除读取下一个字符和续行的任何特殊含义。

于 2012-04-20T00:22:59.957 回答
0

在这里找到了一个很好的参考:

\(反斜杠)是 shell 中的引号字符。这意味着除非 \ 与转义字符一起使用或括在引号中,例如 "" 或 '',否则 shell 会在命令展开时删除反斜杠。

于 2021-08-14T06:52:42.547 回答