防止 foo="*" 中的全局扩展;回声 $foo

防止 foo="*" 中的全局扩展;回声 $foo

在 Bash 中,当我执行以下操作时:

foo="*"
echo $foo

它扩展*到当前文件夹的内容。我如何确保它只打印文字*

顺便说一句,常规 也会发生同样的情况echo "$foo",它会打印当前文件夹的内容。

答案1

让我们定义foo

$ foo="*"

现在,尝试不带引号的 echo:

$ echo $foo
File1 File2

用文件名列表替换*称为路径名扩展。可以用双引号将其抑制:

$ echo "$foo"
*

另外,双引号会阻止大括号扩展,波形符扩展, 和分词

为了完整起见,请尝试使用单引号 echo:

$ echo '$foo'
$foo

单引号完全阻止 shell 进行任何替换。

相关内容