Linux 在bash中将变量中的星号用作扩展名

Linux 在bash中将变量中的星号用作扩展名,linux,bash,variables,Linux,Bash,Variables,我想定义一个包含星号(*)的变量,如下所示 var=*.fits 星号.fits不是我的文件名,而是一些扩展名为fits的文件名。 实际上,我想定义这个变量,以便在下一阶段使用它: ls "$var" 这样我就可以看到扩展名为.fits的所有文件 我该怎么做?似乎仅仅编写var=*.fits是行不通的 提前感谢如果希望通配符分配存储在变量中而不进行全局分词,则必须引用它 var='*.fits *.txt' var=*.fits ls $var 赋值过程中不会执行全局搜

我想定义一个包含星号(*)的变量,如下所示

var=*.fits
星号.fits不是我的文件名,而是一些扩展名为fits的文件名。
实际上,我想定义这个变量,以便在下一阶段使用它:

ls "$var"
这样我就可以看到扩展名为.fits的所有文件

我该怎么做?似乎仅仅编写
var=*.fits
是行不通的

提前感谢

如果希望通配符分配存储在变量中而不进行全局分词,则必须引用它

var='*.fits *.txt'
var=*.fits
ls $var
赋值过程中不会执行全局搜索
var=
(但会进行分词)
正如您所看到的,为了对其进行评估,您不能引用
$var
输出

外壳膨胀到它在全球化的那一刻发现的任何东西

ls "$var"
ls: cannot access '*.fits': No such file or directory

ls $var
file1.fits file2.fits file3.fits

改用数组。var=(*.fits)如下。jordanm的建议是,下一步是
ls“${var[@]}”
谢谢,但是var=(*.fits),然后ls“$var”只列出第一个*.fits文件,而不是更多的文件(不是全部)。非常感谢。使用ls“${var[@]}”列出所有这些文件;在对常规参数赋值的过程中,永远不会执行globbing。假定没有分词会影响结果,则无引号的展开是正确的。@chepner啊,是的,我永远不会学习。同样适用于var=*.fits*.txt*.pdf或在这种情况下更好地引用?你是对的,我不应该引用。这就是问题所在。@alecxs该赋值中的空格需要被引用,否则只有
*。fits
是赋值的一部分
var=*.fits\*.txt\*.pdf
就足够了,不过
var=“*.fits*.txt*.pdf”
更常见。