我使用IFS=', '
将逗号分隔的文本字符串拆分为数组。问题是偶尔有一个以逗号分隔的项目包含:
之后的空格。结果数组包含该项作为两个单独的数组元素。是否可以将IFS设置为仅拆分', '
并忽略包含': '
(或任何其他字符)的逗号分隔项?
请参阅下面第一个命令返回的逗号分隔字符串,请注意第二个项目包含:
。请参阅MarkerNames[1] and MarkerNames[2]
以查看下面第二个命令中的不需要的拆分。
$ 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")'
答案 0 :(得分:2)
IFS
包含每个可以作为字段分隔符的字符的枚举。所以", "
说“任何空格或逗号都会分隔我的字段”。
我认为最简单的解决方法是预处理输出,以便在需要的地方获得休息时间。
IFS='~' MarkerNames=($(exiftool -s3 -TracksMarkersName audioFile.wav | sed 's/, /~/g'))
这当然要求您找到数据中未出现的另一个IFS
值。如果Bash 4+可用,可以使用换行符readarray
。
答案 1 :(得分:0)
您可以在逗号上拆分并删除前导/尾随空格:
create: