【发布时间】:2020-02-02 16:22:06
【问题描述】:
我有一个带有 JQ 依赖项(版本 jq-1.5-1-a5b5cbe)的 bash 脚本,它在 Ubuntu 18.04.2 LTS(bash 版本 4.4.19(1)-release)上按需要运行,但它在Ubuntu 16.04.3 LTS(bash 版本 4.3.48(1)-release)。
while read i;do
echo ${i}
echo "...."
done<<<$(jq -c '.[]' <<<'[{"name" : "alpha"},{"name" : "beta"},{"name" : "gama"},{"name" : "delta"}]')
我希望每个对象都打印在不同的行上,就像我在 Ubuntu 18 上运行的下面那个一样,
{"name":"alpha"}
....
{"name":"beta"}
....
{"name":"gama"}
....
{"name":"delta"}
....
但是在 Ubuntu 16 上,我得到了这个输出,
{"name":"alpha"} {"name":"beta"} {"name":"gama"} {"name":"delta"}
....
当我尝试运行以下脚本时,它可以完美运行,每个对象都在不同的行上。 但是由于 While 循环在子 shell 中运行,如果在其中执行任何操作,我将无法保留变量的状态。所以这是不希望的,因为我想做一些操作并保留变量的状态。
jq -c '.[]' <<<'[{"name" : "alpha"},{"name" : "beta"},{"name" : "gama"},{"name" : "delta"}]' |while read i;do
echo ${i}
echo "...."
done
【问题讨论】:
-
考虑养成通过shellcheck.net 运行代码的习惯,并在此处提问之前修复所有内容;明确包含引用不足的问题。
-
另外,如果您只运行
jq而没有任何while read循环,您会看到两个版本之间的输出相同,因此您会知道问题在于 bash 已更改,而不是jq 变了。
标签: linux bash shell ubuntu jq