我在 bash 中有一个函数,它接受未知数量的参数:
printAndRunCommand() {
printf "$@"
eval "$@"
}
因为 printf 仅接受单个参数,所以当我使用以下命令运行此命令时
printAndRunCommand wget stackoverflow.com
仅打印wget
。我可以使用 echo
命令归档相同的效果,但我使用 printf 特定字符,例如颜色更改,在 origin 命令中看起来像 printf '"\033[4;36m$@\e[0 ;33;40m”
。
如何将 "$@"
传递给 printf
命令?
最佳答案
使用 $*
将参数列表转换为单个字符串。
printf '%s\n' "$*"
更好的是,使用 %q
来引用元字符。
printf '%q ' "${@}"; printf '\n'
$ printAndRunCommand 'a b' c 'foo$bar'
a\ b c foo\$bar
如果您有 bash 4.4+,您可以使用 @Q
获得更好看的输出,并且仍然正确引用。
printf '%s\n' "${*@Q}"
$ printAndRunCommand 'a b' c 'foo$bar'
'a b' 'c' 'foo$bar'
关于bash - 如何打印$@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56098830/