echo 通配符通配符

echo 通配符通配符

我试图回显包含我需要“解压”的通配符的文本和变量的组合,但我遇到了以下行为:

如果我说:

FILENAME=somefile*.txt
echo "something:" $FILENAME

我得到:

something: somefile003.txt

这就是我想要的,但如果我说: 如果我说:

FILENAME=somefile*.txt
echo "something:"$FILENAME

我得到:

something:somefile*.txt

因此,如果引号和变量之间没有空格,它似乎不会使用通配符。有没有办法让它在不添加空格的情况下处理*?

答案1

使用处理数组的 shell,例如bash可以将其通配成数组,因此

FILENAMES=(somefile*.txt)

并像这样引用第一个元素

echo "something:${FILENAMES[0]}"

或者所有人都像这样

echo "somethings:${FILENAMES[@]}"

我强烈建议您在使用变量时“双引号”它们。这可以避免它们意外地扩展为多个单词。

答案2

尝试像这样定义你的变量:

FILENAME=\ somefile*.txt; # that is, with a leading space ... and then
echo "something:"$FILENAME; 

这会将变量插值到...某物:somefile*.txt

然后通配符扩展为...某事:somefile003.txt

然后这两个参数被传递给 echo,后者立即将它们作为标准输出。

相关内容