特别4.0.0是在 Bash 版本中,是否有任何方法可以解决在启用$@时使用空引发未绑定变量错误的问题set -u?
考虑以下:
#!/usr/bin/env bash-4.0.0-1
set -xvu
echo "$BASH_VERSION"
echo "${BASH_VERSINFO[@]}"
main () {
printf '%q\n' "${@:-}"
}
main "${@:-}"
Run Code Online (Sandbox Code Playgroud)
当我提供一组空参数时,给我以下输出:
neech@nicolaw.uk:~ $ ./test.sh
echo "$BASH_VERSION"
+ echo '4.0.0(1)-release'
4.0.0(1)-release
echo "${BASH_VERSINFO[@]}"
+ echo 4 0 0 1 release x86_64-unknown-linux-gnu
4 0 0 1 release x86_64-unknown-linux-gnu
main () {
printf '%q\n' "${@:-}"
}
main "${@:-}"
./test.sh: line 12: $@: unbound variable
Run Code Online (Sandbox Code Playgroud)
我只在 Bash 版本中看到这种行为4.0.0。
我希望使用变量替换${@:-}可以让我解决这个问题,但似乎不是。
有没有办法解决这个问题?
我需要解析npm ls --global --json命令的输出,以便获得npm以下格式的所有已安装软件包的列表:
$package;$version;js;$resolved
在哪里:
$package是包含每个对象的包名称的键dependencies。$version是version从每个包中获取的值js只是一个文字字符串$resolved是resolved从每个包中获取的值我已经了解了这个命令语法和输出:
$ jq --raw-output 'select( has("dependencies") ) .dependencies[] | . as $d | "parentkey" + ";" + $d.version + ";js;" + $d.resolved'`
parentkey;5.5.1;js;
parentkey;1.1.3;js;https://registry.npmjs.org/yaml-table/-/yaml-table-1.1.3.tgz
Run Code Online (Sandbox Code Playgroud)
我具体遇到困难的部分如下:
如何获取我正在迭代的.dependencies包含该包名称的键名称值。似乎到那时我正在查看该对象本身的内容。
如何递归访问所有依赖对象?目前我只查看根.dependencies对象中的顶级记录。我发现了..递归,但我不太确定如何在这里应用它。
根据下面的示例数据,我试图达到以下输出结果:
npm;5.5.1;js;
JSONStream;1.3.1;js;https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz
jsonparse;1.3.1;js;https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz
through;2.3.8;js;https://registry.npmjs.org/through/-/through-2.3.8.tgz
yaml-table;1.1.3;js;https://registry.npmjs.org/yaml-table/-/yaml-table-1.1.3.tgz
js-yaml;3.4.6;js;https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz
argparse;1.0.9;js;https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz
Run Code Online (Sandbox Code Playgroud)
我在上面的示例中使用的一些(大大减少的)示例npm ls --global --json输出如下:
{
"dependencies": {
"npm": {
"version": "5.5.1",
"dependencies": { …Run Code Online (Sandbox Code Playgroud)