我正在使用以下方法从文件中读取一些变量
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