如何用输入填充值
How to populate value with input
从 composer.lock 我正在创建一些字段的 json 输出,如下所示:
<composer.lock jq '.packages[] | {site: "foo", name: .name, version: .version, type: .type}' | jq -s
它工作正常:
{
"site": "foo",
"name": "webmozart/path-util",
"version": "2.3.0",
"type": "library"
},
{
"site": "foo",
"name": "webonyx/graphql-php",
"version": "v14.9.0",
"type": "library"
}
但现在我想使用 uuidgen 添加生成的值,但我不知道该怎么做。
最终结果会是这样的:
{
"site": "foo",
"name": "webmozart/path-util",
"version": "2.3.0",
"type": "library",
"uuid": "c4e97c3c-147d-4360-a601-6b4f6f5e71bb"
},
{
"site": "foo",
"name": "webonyx/graphql-php",
"version": "v14.9.0",
"type": "library",
"uuid": "6fbe472b-49fe-4064-93f0-09a18a7e1c24"
}
我想我应该使用输入法,但到目前为止我尝试的所有方法都失败了。
这是一种不需要您的 shell 支持“进程替换”但需要两次通过的可能性,第一次用于确定所需的 UUID 数量:
# Syntax: generate N
function generate {
for ((i=0; i<; i++)) ; do
uuidgen
done
}
generate $( <composer.lock jq '.packages|length') |
jq -nR --argfile input composer.lock '
($input
| .packages[]
| {site: "foo", name: .name, version: .version, type: .type,
id: input})'
如果您的 shell 支持进程替换,您可以避免以下两遍解决方案:
jq -nR --argfile input composer.lock '
$input
| .packages[]
| {site: "foo", name: .name, version: .version, type: .type, id: input}
' < <(while true; do uuidgen; done)
这里的重点是,如上使用进程替换,“消费者”(jq)的终止也将终止UUID的“生产者”。
从 composer.lock 我正在创建一些字段的 json 输出,如下所示:
<composer.lock jq '.packages[] | {site: "foo", name: .name, version: .version, type: .type}' | jq -s
它工作正常:
{
"site": "foo",
"name": "webmozart/path-util",
"version": "2.3.0",
"type": "library"
},
{
"site": "foo",
"name": "webonyx/graphql-php",
"version": "v14.9.0",
"type": "library"
}
但现在我想使用 uuidgen 添加生成的值,但我不知道该怎么做。
最终结果会是这样的:
{
"site": "foo",
"name": "webmozart/path-util",
"version": "2.3.0",
"type": "library",
"uuid": "c4e97c3c-147d-4360-a601-6b4f6f5e71bb"
},
{
"site": "foo",
"name": "webonyx/graphql-php",
"version": "v14.9.0",
"type": "library",
"uuid": "6fbe472b-49fe-4064-93f0-09a18a7e1c24"
}
我想我应该使用输入法,但到目前为止我尝试的所有方法都失败了。
这是一种不需要您的 shell 支持“进程替换”但需要两次通过的可能性,第一次用于确定所需的 UUID 数量:
# Syntax: generate N
function generate {
for ((i=0; i<; i++)) ; do
uuidgen
done
}
generate $( <composer.lock jq '.packages|length') |
jq -nR --argfile input composer.lock '
($input
| .packages[]
| {site: "foo", name: .name, version: .version, type: .type,
id: input})'
如果您的 shell 支持进程替换,您可以避免以下两遍解决方案:
jq -nR --argfile input composer.lock '
$input
| .packages[]
| {site: "foo", name: .name, version: .version, type: .type, id: input}
' < <(while true; do uuidgen; done)
这里的重点是,如上使用进程替换,“消费者”(jq)的终止也将终止UUID的“生产者”。