Why do backslashes disappear when run through echo?

99封情书 提交于 2019-11-28 01:09:24

问题


I have code like this, which processes a CSV file:

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

If the CSV file contains any \, when I run this command, the output text does not show the \.

How can I ensure that \ is not deleted?


回答1:


The reason for this behaviour is that the read builtin uses \ as escape character. The -r flag disables this behaviour.

So, this should work:

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

You should also place "..." around things like $(...) and variables, like

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



回答2:


The man page for bash has this to say about read:

The backslash character (\) may be used to remove any special meaning for the next character read and for line continuation.



来源:https://stackoverflow.com/questions/10238617/why-do-backslashes-disappear-when-run-through-echo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!