请注意 shell 和在 shell 中定义的函数之间的以下不同行为:
第一:直接在shell上尝试:
0:23:34/shared $ls -dlrta ?pectral*
-rw-r-----@ 1 steve staff 4430060 Oct 27 10:38 SpectralClustering.pdf
-rw-r-----@ 1 steve staff 840539 Oct 27 14:54 spectralEigenValues.pdf
-rw-r-----@ 1 steve staff 839485 Oct 27 14:56 Spectral EigenMatrices.pdf
-rw-r-----@ 1 steve staff 1928395 Oct 29 23:10 spectralClusteringlecture.pdf
drwxr-xr-x 45 steve staff 1530 Nov 6 10:37 spectral.new
-rw-r--r-- 1 steve staff 5452 Nov 13 01:26 SpectralClusteringSuite.scala
-rw-r--r-- 1 steve staff 7935 Nov 13 01:26 SpectralClustering.scala
drwxr-xr-x 40 steve staff 1360 Dec 21 08:32 spectral.old
drwxr-xr-x 45 steve staff 1530 Dec 23 09:06 spectral
现在让我们定义一个包含该命令的函数:
$type ldr
ldr is a function
ldr ()
{
ls -dlrta $1
}
让我们尝试一下该功能:
0:23:06/shared $ldr ?pectral*
ls: EigenMatrices.pdf: No such file or directory
drwxr-xr-x 45 steve staff 1530 Dec 23 09:06 Spectral
关于如何协调/强制函数中与命令行上直接的(期望的)行为相同的行为,有什么提示吗?
答案1
您的功能需要
ldr () { ls -dlrta "$@"; }
使用引用形式"$@"
来使用全部参数,使用空格保护。