【发布时间】:2017-04-09 10:01:18
【问题描述】:
比方说,有一个命令genpairs 生成以空字符结尾的字符串。
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]
如何将空终止输入读入多个变量?
编辑了 OP 的问题 - 添加了一个更好的演示 - x y z
我可以这样解决:
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]
但它在我看来真的很糟糕的解决方案......
【问题讨论】:
标签: bash