为什么 ls 不能识别这个声明的单行变量?

为什么 ls 不能识别这个声明的单行变量?

我正在经历 Linux From Scratch 项目,我想在继续每个步骤之前验证每个程序和库是否已正确创建。

(我在这里和谷歌搜索,但我能找到的几乎所有内容都是关于回显在同一行中声明的 var 或将 的输出转储ls到变量的问题,这两者都不适用于我的情况)

我将使用不同的模式多次键入类似于以下内容的命令:

ls -ld /tools/lib/mypattern* /tools/bin/mypattern*

例如:

ls -ld /tools/lib/tcl* /tools/bin/tcl*

由于重复使用相同的模式,我想将其简化为如下所示:

glob=mypattern* ls -ld /tools/lib/$glob /tools/bin/$glob

但如果我跑:

glob=tcl* ls -ld /tools/lib/$glob /tools/bin/$glob

然后我得到的是这样的:

drwxr-xr-x  2 lfs lfs 4096 Dec  2 03:02 /tools/bin/
drwxr-xr-x 16 lfs lfs 4096 Dec  2 03:02 /tools/lib/

很明显该变量没有被正确拾取。

如果我使用ls在两个地方手动键入的模式来运行,那么我会得到正确的输出:

$ ls -ld /tools/lib/tcl* /tools/bin/tcl*
lrwxrwxrwx 1 lfs lfs     8 Dec  2 02:39 /tools/bin/tclsh -> tclsh8.6
-rwxr-xr-x 1 lfs lfs 20512 Dec  2 02:38 /tools/bin/tclsh8.6
drwxr-xr-x 5 lfs lfs  4096 Dec  2 02:38 /tools/lib/tcl8
drwxr-xr-x 6 lfs lfs  4096 Dec  2 02:38 /tools/lib/tcl8.6
-rw-r--r-- 1 lfs lfs  7660 Dec  2 02:38 /tools/lib/tclConfig.sh
-rw-r--r-- 1 lfs lfs   773 Dec  2 02:38 /tools/lib/tclooConfig.sh

我怎样才能缩短这个命令,以便每次运行时只需输入一次模式?

答案1

扩展在变量赋值之前执行,命令执行在变量赋值之后执行。使用大括号扩展相反,就像

ls -ld /tools/{lib,bin}/tcl*

相关内容