我正在尝试编写一个bash函数,该函数的行为与ls相同,但是它显示的是完整路径,而不是相对路径。到目前为止,我写的是以下内容:
ls_abs()
{
if [ -z "$1" ]
then
ls -d -1 $PWD/*
else
ls -d -1 $PWD/${1}
fi
}
调用ls_abs
似乎很好,但是当我尝试使用通配符(例如ls_abs thisdir/that*/anotherdir/*.log
)进行调用时,由于某种原因,它只会输出一行。有人可以帮助我了解我在做什么错吗?
Shell在调用ls_abs
函数之前会自动扩展您的通配符表达式,因此它将接收多个参数,并且${1}
是第一个,因此您只会看到一行输出。
您将在此处有两个选择:
ls_abs "thisdir/that*/anotherdir/*.log"
$@
处理所有传递的位置参数。ls_abs() {
ls -d -1 "$@"
}
ls_abs thisdir/that*/anotherdir/*.log