I have Ubuntu 16.04.6 (Edit: Now updated to 16.04.7), with bash 4.3.48(1)-release (x86_64-pc-linux-gnu). I am not able to set/reset my IFS variable. I have tried to set is using the literal CTRL+V and as well. Even tried unset.
Interestingly, the behaviour the same for any other variable ($Other_IFS below).
Any pointers?
Below is the output of my attempts:
mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ IFS=$' \t\n' mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ IFS=" ^M" mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ unset IFS mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ IFS=" ^M" mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ Other_IFS=" ^M" mike@laptop:~ $ IFS="$Other_IFS" mike@laptop:~ $ cat -vte <<< $IFS $ mike@laptop:~ $ cat -vte <<< $Other_IFS $ Edit: (based on some of the comments, I am adding an example):
The data file: (TAB separated)
Col1 Col2 Col3 312 19 [1,1,3,2] 763 1 [2,3,0,8] 12 104 [3,0,0,3] 150 208 [3,0,2,3] I am sorting the file on Col1 and getting the values of Col2 and Col3 of the last entry (after sorting), in an array. Then I am printing the array values separately. Here is the command used to achieve this:
max=($(sort -t $'\t' -n -k1,1 my_file | cut -d $'\t' -f2,3 | tail -1)) echo ${max[1]} In the above example, the output is
[2, instead of [2,3,0,8].
At the beginning of the script, I have already added
OFS="$IFS" IFS=$'\t' and at the end,
IFS="$OFS" Note On a different system (Ubuntu 20.04.1, bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)), the script is producing an expected output.