引号内的通配符

tis*_*sek 44 shell quoting wildcards

这将是一个简单的方法,但在我的记忆中,在编写 shell 脚本时,使用双引号将允许扩展通配符和变量。

但是在下面的代码中:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG
Run Code Online (Sandbox Code Playgroud)

所以单引号可以防止 glob AND 变量扩展,但双引号只允许变量扩展而不允许 globbing?

我可以使用任何引用模式吗?

Flu*_*lup 41

你是对的:通配符在单引号或双引号中都不起作用。但是,您可以使用双引号字符串插入通配符:

$ echo "你好世界" *.sh "再见世界"
你好世界 [文件列表] 再见世界

  • 甚至`echo "$hello and $goodbye".*`(在同一个“单词”中混合变量扩展、空格和glob。 (9认同)
  • @CMCDragonkai `echo "$FOLDER_PATH"/*.extension` 对我来说很好用,与接受的答案相反,我不得不删除 `"` 和 `*` 之间的空格。希望它有帮助。 (3认同)