在 Bash 中,当我执行以下操作时:
foo="*"
echo $foo
它扩展*
到当前文件夹的内容。我如何确保它只打印文字*
?
顺便说一句,常规 也会发生同样的情况echo "$foo"
,它会打印当前文件夹的内容。
答案1
让我们定义foo
:
$ foo="*"
现在,尝试不带引号的 echo:
$ echo $foo
File1 File2
用文件名列表替换*
称为路径名扩展。可以用双引号将其抑制:
$ echo "$foo"
*
另外,双引号会阻止大括号扩展,波形符扩展, 和分词。
为了完整起见,请尝试使用单引号 echo:
$ echo '$foo'
$foo
单引号完全阻止 shell 进行任何替换。