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?
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"
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.