我需要解析一些 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