echo 通配符通配符

Max*_*xim 2 shell-script echo wildcards

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

如果我说:

FILENAME=somefile*.txt
echo "something:" $FILENAME
Run Code Online (Sandbox Code Playgroud)

我得到:

something: somefile003.txt
Run Code Online (Sandbox Code Playgroud)

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

FILENAME=somefile*.txt
echo "something:"$FILENAME
Run Code Online (Sandbox Code Playgroud)

我得到:

something:somefile*.txt
Run Code Online (Sandbox Code Playgroud)

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

roa*_*ima 5

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

FILENAMES=(somefile*.txt)
Run Code Online (Sandbox Code Playgroud)

并像这样引用第一个元素

echo "something:${FILENAMES[0]}"
Run Code Online (Sandbox Code Playgroud)

或者所有人都像这样

echo "somethings:${FILENAMES[@]}"
Run Code Online (Sandbox Code Playgroud)

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