在 bash 中使用 while read 跳过变量

在 bash 中使用 while read 跳过变量

我正在使用以下方法从文件中读取一些变量

while read a b c; do
  (something)
done < filename

有没有一种优雅的方法可以跳过一个变量(读入一个空值),例如,如果我想要 a=1 b=c=3,我应该在文件中写什么?

现在我正在

1 "" 3

然后使用

b=$(echo $b | tr -d \" )

但在我看来,这很麻烦

有任何想法吗?

答案1

带有空白字段:

1 3

你可以做:

if [[ -z c ]]
then
    c=b
    b=
fi

如果您的数据以逗号分隔,您也可以执行以下操作:

while IFS=, read a b c

(但是如果您的字段包含逗号,您就会遇到问题,就像在当前版本中如果它们包含引号一样):

1,,3

tr此外,在您的版本中,您可以执行以下操作,而不是使用:

b=${b//\"\"}

但您可以使用以下命令结合当前数据格式来完全消除该步骤:

while IFS='"' read a b c

但是,逗号分隔的字段是更常见的格式。

答案2

我不确定我是否理解你想要什么,但你可以跳过迭代的某些值(无论是 while、for 还是其他)继续甚至停止迭代休息

while read a b c ;do 
   if [[ $b == 0 || $c == 0 || $a == 0 ]];then
      continue
   fi      
   (makelovenotwar)
done < /foo/bar

相关内容