bash:如何防止在读取时扩展/*?

bash:如何防止在读取时扩展/*?

我需要解析一些 PHP 文件,它们包含如下注释/**/

read line <<< "/*"
echo $line

我想要变量line/*,而不是/bin /boot /cdrom /core /dev /etc /home...

答案1

变量实际上保持准确/*。你的echo打印/bin /boot …因为壳膨胀未引用 $line就在运行之前echo。在 Bash 中,扩展未加引号的变量涉及单词拆分和文件名生成(通配符)。

用双引号括住变量:

read line <<< "/*"
echo "$line"

习惯用双引号括住所有变量。

其他有待改进的地方:

答案2

你的问题实际上是 通配符,而不是扩张。

这是解决你的问题的一种方法:

$ #disable glob (noglob)
$ set -f
$ echo $line
/*
$ #re-enable glob
$ set +f

有用的读物​​: 停止 shell 通配符扩展?

答案3

感谢大家,也为我的错误道歉。是的,通配符的问题(作为扩展的特殊情况?)
替换后正确的代码是

read line <<< "/* string */"
echo "${line//"*"/!}"

或者

set -f
echo ${line//"*"/!}
set +f

"*"(带引号)是必要的,尽管set -f

相关内容