如何打印$ @

deathangel908 1 bash

我在bash中有一个函数,它接受未知数量的参数:

printAndRunCommand() {
  printf "$@"
  eval "$@"
}

因为printf仅接受单个参数,所以当我使用

printAndRunCommand wget stackoverflow.com 

wget被打印。我可以使用echocommand 来存档相同的效果,但是在origin命令中,我使用printf特定字符(例如颜色更改)printf '"\033[4;36m$@\e[0;33;40m"

如何传递"$@"printf命令?

John Kugelma.. 5

使用$*转的参数列表合并成一个字符串。

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'