gpt4 book ai didi

bash - Bash 4.0.0 中 $@ 未绑定(bind)变量的解决方法?

转载 作者:行者123 更新时间:2023-12-04 01:44:32 24 4
gpt4 key购买 nike

在特定的 Bash 版本 4.0.0 中,有什么方法可以解决使用空 $@ 时引发未绑定(bind)变量错误的问题 set - u 已启用?

考虑以下几点:

#!/usr/bin/env bash-4.0.0-1

set -xvu

echo "$BASH_VERSION"
echo "${BASH_VERSINFO[@]}"

main () {
printf '%q\n' "${@:-}"
}

main "${@:-}"

当我提供一组空参数时,会得到以下输出:

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

我只在 Bash 版本 4.0.0 中看到这种行为。

我希望使用变量替换 ${@:-} 能让我解决这个问题,但似乎不行。

有没有办法解决这个问题?

最佳答案

$@, $* 是特殊变量所以应该总是被定义这是一个错误

https://unix.stackexchange.com/questions/16560/bash-su-unbound-variable-with-set-u

解决方法,也许:

set +u
args=("$@")
set -u

main "${args[@]}"

或者也许也是

main "${@:+$@}"

关于bash - Bash 4.0.0 中 $@ 未绑定(bind)变量的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com