我有这样的代码,用于处理CSV文件:
#!/bin/bash
while read line
do
variable=$(echo $line | awk -F, '{print $2}')
echo $variable
done < ./file.csv
如果CSV文件中包含任何
\
,当我运行此命令时,输出文本不会显示\
。如何确保
\
不被删除?read
命令使用\
作为转义字符。通过使用-r
参数可以禁用这种行为。while read -r line
variable=$(echo $line | awk -F, '{print $2}')
echo $variable
done < ./file.csv
你还应该像这样在 $(...)
和变量周围放置 "..."
。
variable="$(command)"
echo "$variable"
cut -d,-f2
替代那个 awk
命令。 - Zashread -r
建议对于我相反的问题,即如何在while循环中删除\也适用,所以谢谢! - Chris Mariebash
的 man 手册对 read
命令有如下说明:
反斜杠字符 (\) 可以用于取消下一个字符的特殊含义,以及进行行续航。
在 shell 中,\(反斜杠)是引号字符。这意味着,除非 \ 与转义字符一起使用或用引号括起来,例如 "" 或 '',否则当命令被扩展时,shell 会删除反斜杠。
"$(echo "$line" | awk -F, '{print $2}')"
. - C2H5OH