Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 808
Village Avatar asked Apr 20 '12 00:04

Village


1 Answers

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"
like image 174
Zash Avatar answered Sep 28 '22 18:09

Zash