Tôi đã tìm thấy một hành vi kỳ lạ mà tôi không biết cách giải quyết.Làm thế nào tôi có thể buộc bash mở rộng một biến để chuyển nó thành một đối số?
$ var1=*
$ echo $var1
Audiobooks Downloads Desktop (etc.)
$ ls $var1
Audiobooks:
Downloads:
(etc)
Tất cả có vẻ OK. Khi khai báo, biến được mở rộng và mọi thứ khác hoạt động. Nhưng thấy điều này:
$ 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
thời gian này, tại tuyên bố chỉ ~
được mở rộng, trong đó sản xuất mà tôi không thể vượt qua nó như một tham số để ls
. Tuy nhiên, đi qua cùng một chuỗi theo nghĩa đen tạo ra kết quả mong đợi.
Câu hỏi là:
- Tại sao đôi khi mở rộng và đôi khi không?
- Làm cách nào để bắt chước hành vi của
$var1
với$var2
?
Cảm ơn.
ghi chú thêm:
tôi đã cố gắng cùng với dấu ngoặc kép và duy nhất, nhưng với kết quả xấu như vậy.
Xem [Làm thế nào để biến các biến trong tập lệnh bash?] (Http://stackoverflow.com/questions/369145/how-to-glob-variables-in-bash-script). – tom