Bash 字符串中的条件引用

Bash Conditional Quote in String

我在 bash 中解析了一个 CSV 文件,对于一列,某些行具有多个值。 例如,包含多个值的一行可能看起来像

name,12,120,east,"sw1,sw2,sw3"

但并非所有行都有。有些可能看起来像

name,10,141,west,sw5534a

我想要做的是,如果该列中有引号,则将其删除并将变量设置为 sw1,sw2,sw3

脚本的相关部分:

#!/bin/bash
INPUT=file.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read name building id region parents
do
echo "
....snip....
parents $parents"

我想要 $parents 的输出应该是 sw1,sw2,sw3 但现在它显示为 "sw1,sw2,sw3" 如果该列有一个逗号以删除第一个和最后两个字符,我试过在有条件的情况下使用正则表达式匹配,但我无法让它工作。要么它会删除第一个 s 和最后一个 3 要么它会出错。

感谢任何建议!

您可以使用子字符串替换删除 $parents 变量中 " 字符的两个实例:

echo ${parents//\"/}

这会将所有 " 个字符替换为空字符串。

parents="${parents#\"}"
parents="${parents%\"}"

这将删除第一个字符(如果是引号)和最后一个字符(如果是引号)。如果它们不是引号,它们将保持不变。