Bash 4.0.0 中 $@ 未绑定变量的解决方法?

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 "${@:-}"
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

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

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

Nah*_*eul 6

$@,$*是特殊变量所以应该始终定义它是一个错误

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

一种解决方法,也许:

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

main "${args[@]}"
Run Code Online (Sandbox Code Playgroud)

或者也可能

main "${@:+$@}"
Run Code Online (Sandbox Code Playgroud)