4
假設有一個命令genpairs
,它會生成以空字符結尾的字符串。如何使用bash讀取以空對結尾的字符串成對
key1 \0 val1 \0 key2 \0 val2 \0
想要將上述輸入成對讀入bash變量。對我來說,以下不工作:
genpairs() { #for the demo
printf "%d\0x\0" 1
printf "%d\0y\0" 2
printf "%d\0z\0" 3
}
#the above generates 1 \0 x \0 2 \0 y \0 3 \0 z \0 etc...
while IFS= read -r -d '' key val; do
echo "key:[$key] val:[$val]"
done < <(genpairs)
打印
key:[1] val:[]
key:[x] val:[]
key:[2] val:[]
key:[y] val:[]
key:[3] val:[]
key:[z] val:[]
例如讀數有些不會在$'\0'
上分成兩個變量。
的通緝輸出:
key:[1] val:[x]
key:[2] val:[y]
key:[3] val:[z]
如何讀取空值終止輸入多個變量?
編輯的任擇議定書的問題 - 增加了一個更好的演示 - XYZ
我能解決它:
n=0
while IFS= read -r -d '' inp; do
if ((n % 2))
then
val="$inp"
echo "key:[$key] val:[$val]"
else
key="$inp"
fi
let n++
done < <(genpairs)
這將輸出
key:[1] val:[x]
key:[2] val:[y]
key:[3] val:[z]
,但它看起來對我來說真的很可怕解決方案...
爲什麼需要問這樣簡單的解決方案... :(感覺愚蠢的。非常感謝!!! – cajwine