假设我在Bash中有一个函数:
function ll {
command ls -l $*
}
因此ll
的作用就像ls -l
一样。大多数情况下,它会起作用,但
ls -l "ha ha"
适用于名称为ha ha
的文件,但
ll "ha ha"
会失败,因为它被认为是
ls -l ha ha
有没有办法让这项工作?我想我们可以做到这一点
function ll {
command ls -l "$@"
}
(请注意"$@"
与"$*"
不同,"$@"
表示单独引用,而"$*"
表示所有引用在一个字符串中)
但是,ll -t "ha ha"
会变成ls -l "-t" "ha ha"
,这实际上有效,但有点奇怪,我不确定它是否会在某些情况下崩溃。
还有另一种方法可以让它发挥作用,而另一件事是,我认为在函数中,command ls -l "$@"
和ls -l "$@"
是一样的吗? (command
只是直接运行程序而不调用任何可能的bash函数来阻止递归发生?)
答案 0 :(得分:4)
由于shell在执行ls
之前执行引用删除,因此没有问题。你可以安全地使用
function ll {
command ls -l "$@"
}
并将其称为ll -t "ha ha"
。请参阅shell的手册页并搜索“报价删除”。