I'm using IFS=', '
to split a string of comma-delimited text into an array. The problem is that occasionally one of the comma-delimited items contains a space following a :
. The resulting array contains that item as two separate array elements. Is it possible to set IFS to only split ', '
and ignore a comma-delimited item that contains ': '
(or any other character for that matter)?
See the comma-delimited string returned from the first command below, note the second item has the :
. See the MarkerNames[1] and MarkerNames[2]
to see the unwanted split in the second command below.
$ exiftool -s3 -TracksMarkersName audioFile.wav
Marker1, Tempo: 120.0, Silence, Marker2, Silence.1, Marker3, Silence.2, Marker4, Silence.3, Marker5
$ IFS=', ' read -r -a MarkerNames <<< $(exiftool -s3 -TracksMarkersName audioFile.wav)
$ declare -p MarkerNames
declare -a MarkerNames='([0]="Marker1" [1]="Tempo:" [2]="120.0" [3]="Silence" [4]="Marker2" [5]="Silence.1" [6]="Marker3" [7]="Silence.2" [8]="Marker4" [9]="Silence.3" [10]="Marker5")'
IFS
contains an enumeration of the characters which each can be a field separator. So", "
says "any run of spaces or commas separates my fields".The simplest workaround I think would be to preprocess the output so you get the breaks where you want them.
This of course requires you to find another
IFS
value which doesn't occur in your data. If Bash 4+ is available, maybe use a newline andreadarray
.