2017-06-07 64 views
0

分配默認值的變量我如何讀取一行數據,並將其分配給變量,同時也讓他們默認值?讀取一條線,在BASH

我想實現這樣的事情,但不能得到語法正確。

{ 
read variable1=${variable1:=default1} variable2=${variable2:=default2} 
read variable3=${variable3:=default3} variable4=${variable4:=default4} 
} <fileList 
+0

是您的文件界定?要求不明確。 – codeforester

+0

該文件只有空格和換行符分隔。 – user1378987

+0

你只處理4個變量還是變量數量未知? –

回答

1

使用一個循環:

while read -r var1 var2 dummy; do 
    var1=${var1:-default1} 
    var2=${var2:-default2} 
    # process this line 
done < fileList 
  • read -r var1 var2 dummy - 如果行有兩個以上的空間分隔的記號,他們將被讀入dummy,可以忽略
  • 如果行有小於兩個標記,默認值將是有效的
+0

嗨,感謝您的回覆!如果有多行,這是否仍然適用? – user1378987

+0

是的,你需要添加處理步驟。 – codeforester

+0

我在哪裏插入讀取變量3和變量4的步驟? – user1378987

0

血肌酐ipt(轉file_reader.sh)

# Read in the 2 fields from the first (odd) line 
while read var1 var2 
do 
    # Read in the 2 fields from the next (even) line 
    read var3 var4 

    # Set defaults 
    : ${var1:=var1_default} 
    : ${var2:=var2_default} 
    : ${var3:=var3_default} 
    : ${var4:=var4_default} 

    echo "$var1 $var2 $var3 $var4" 
done < foo.txt 

輸入(foo.txt的)

eins zwei   < line 1 (odd) 
drei vier   < line 2 (even) 
    < blank line 
fünf 
    < blank line 
sechs sieben 
acht 

輸出

我管道的file_reader.sh輸出到column命令使值更易讀$ ./file_reader.sh | columnt -t ...

eins   zwei   drei   vier 
var1_default var2_default fünf   var4_default 
var1_default var2_default sechs  sieben 
acht   var2_default var3_default var4_default 
+0

是的,這也是我想要實現的,但是每行應該有多個值。而默認值將只適用於空白行。 – user1378987

+0

@ user1378987查看已更新的答案 –