bash - 如何打印$@

标签 bash

我在 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/

相关文章:

bash - ksh 变量接受的最大字符数是多少?

linux - bash 根据末尾的序列号删除重复文件

linux - 使用脚本从函数中提取参数

linux - 在许多不同的计算机上自动运行一个程序

java - 在 Maven 构建之后构建 "live"目录结构的正确方法?

python - 在Python中执行一个BASH命令——在同一个进程中

java - Bash 剥离引号 - 如何保留引号

linux - 将文件重命名为哈希和扩展名

php - 清除具有复杂字符的 decode_base64 攻击的脚本

bash - bash命令行上双尖括号的用途?