0

所以我有这个 bash 功能:

function xyz(){
  echo $@
}

现在当我跑步时

xyz whaat  "loool * hahhaa"

而不是回声whaat "loool * hahhaa"

它代替了回声:

whaat loool all default hahhaa

首先引号被去掉了。其次, * 被替换为 "all default" 。这是因为当前目录有 2 个文件夹,分别称为“all”和“default”,因此它认为 * 指的是当前目录中的所有目录

有没有办法修改我的功能,使输出成为相应的预期whaat "loool * hahhaa"(包括引号和*)

我试过做${@} "$@""${@}"无济于事

4

1 回答 1

4

引号真的消失了,所以不要指望任何东西会把它们放回去。Bash 在解析命令行时将它们删除(在 中搜索“引号删除” man bash)。

但是,要么 要么echo "$@"echo "${@}"避免 glob 扩展(替换*为目录列表)。

你几乎从不想要$@。最好养成写作的习惯"$@"

如果您想查看参数的引用版本,可以将 bash 扩展名添加到 printf:

xyz() {
  printf "%q " "$@"
  printf "\n"
}
于 2013-10-17T19:21:16.670 回答