Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
683 views
in Technique[技术] by (71.8m points)

bash - Why do backslashes disappear when run through echo?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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"

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...