Bash的函数会调用引用参数分解的命令吗?

时间:2012-09-18 11:11:31

标签: bash bash-function

假设我在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函数来阻止递归发生?)

1 个答案:

答案 0 :(得分:4)

由于shell在执行ls之前执行引用删除,因此没有问题。你可以安全地使用

function ll {
    command ls -l "$@"
}

并将其称为ll -t "ha ha"。请参阅shell的手册页并搜索“报价删除”。