我发现了一个奇怪的行为,我不知道如何解决。
$ var1=*
$ echo $var1
Audiobooks Downloads Desktop (etc.)
$ ls $var1
Audiobooks:
Downloads:
(etc)
一切似乎都很好。在声明时,变量得到扩展,其他一切正常。但是看到这个:
$ var2=~/rpmbuild/{SRPMS,RPMS/*}/enki-*.rpm
$ echo $var2
/home/yajo/rpmbuild/{SRPMS,RPMS/*}/enki-*.rpm
$ ls $var2
ls: no se puede acceder a /home/yajo/rpmbuild/{SRPMS,RPMS/*}/enki-*.rpm: No existe el fichero o el directorio
$ ls /home/yajo/rpmbuild/{SRPMS,RPMS/*}/enki-*.rpm
/home/yajo/rpmbuild/RPMS/noarch/enki-12.10.3-1.fc18.noarch.rpm /home/yajo/rpmbuild/SRPMS/enki-12.10.3-1.fc18.src.rpm
/home/yajo/rpmbuild/RPMS/noarch/enki-12.10.3-1.fc19.noarch.rpm /home/yajo/rpmbuild/SRPMS/enki-12.10.3-1.fc19.src.rpm
这一次, at 声明只会~
被扩展,这导致我不能将它作为参数传递给ls
. 但是,从字面上传递相同的字符串会产生预期的结果。
问题是:
- 为什么有时扩展有时不扩展?
- 如何模仿
$var1
with的行为$var2
?
谢谢。
额外说明:
我用双引号和单引号尝试了同样的方法,但结果同样糟糕。