The script is reading the text from the .csv file and storing it as variables in subshell I believe, after that I want to use those variables in shell but they are blank, how to modify the script so it will always remember those variables?
INPUT=file.csv
IFS=','
while read line1
do
echo "this is $line1"
done < $INPUT
echo "test $line1"
CodePudding user response:
The while
in your script is not working in subshell. The variable
line1
will be empty just after exiting the loop because read
encounters
end of file
, which is the condition to exit the loop. The variable line1
is overwritten to empty string at that moment. Please try the
following script:
INPUT=file.csv
IFS=','
while read -r line1
do
echo "this is $line1"
break
done < "$INPUT"
echo "test $line1"
Then you'll see the variable $line1
holds the value of the 1st line
in the input file.
If you want to preserve the value of $line1
, assign another variable
to it in the loop:
INPUT=file.csv
IFS=','
while read -r line1
do
echo "this is $line1"
line=$line1
done < $INPUT
echo "test1 $line1"
echo "test2 $line"
BTW the IFS
will not work to split the line because you are putting just one variable. If you want to split the line into
multiple variables, please try:
while IFS=, read -r col1 col2 ..
or
while IFS=, read -r -a ary
depending on the purpose.