所以我有这个bash函数:
function xyz(){
echo $@
}
现在我跑
xyz whaat "loool * hahhaa"
而不是回显whaat "loool * hahhaa"
whaat loool all default hahhaa
首先,引号被剥离了。 其次*被“全部默认”取代。这是因为当前目录有2个名为“all”和“default”的文件夹,因此它认为*指的是当前目录中的所有目录
有没有办法修改我的功能,以便输出相应地成为预期的whaat "loool * hahhaa"
(包括引号和*)
我尝试${@}
"$@"
和"${@}"
无效
答案 0 :(得分:4)
引号真的不见了,所以不要指望任何东西把它们放回去。 Bash在解析命令行时删除了它们(在man bash
中搜索“quote removal”)。
但是,echo "$@"
或echo "${@}"
将避免全局扩展(将*
替换为目录列表)。
你几乎不想要$@
。最好养成写"$@"
的习惯。
如果你想看一个引用版本的参数,你可以对printf进行bash扩展:
xyz() {
printf "%q " "$@"
printf "\n"
}