Nic*_*ton 3 bash shell sh bash4
特别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 "${@:-}"
当我提供一组空参数时,给我以下输出:
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 "${@:+$@}"