0

假设我在 Bash 中有一个函数:

function ll {
    command ls -l $*
}

所以它是使ll作品像ls -l。大多数情况下,它会起作用,但是

ls -l "ha ha"

可以使用 name 的文件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函数来防止递归发生吗?)

4

1 回答 1

4

由于 shell 在执行之前执行了引号删除ls,所以没有问题。您可以放心使用

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

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

于 2012-09-18T11:57:32.337 回答