我有这样的代码,它处理一个 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"
的手册页bash
有这样的说法read
:
反斜杠字符 (\) 可用于删除读取下一个字符和续行的任何特殊含义。
在这里找到了一个很好的参考:
\(反斜杠)是 shell 中的引号字符。这意味着除非 \ 与转义字符一起使用或括在引号中,例如 "" 或 '',否则 shell 会在命令展开时删除反斜杠。