脚本和命令行之间的 Glob 行为差异

脚本和命令行之间的 Glob 行为差异

请注意 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 "$@"; }

使用引用形式"$@"来使用全部参数,使用空格保护。

相关内容