我试图回显包含我需要“解压”的通配符的文本和变量的组合,但我遇到了以下行为:
如果我说:
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,后者立即将它们作为标准输出。