我正在对导致单行输出的文件执行 grep。此输出中包含 * 作为数据。在 shell 脚本中,我试图将值分配给一个变量,但 * 被当前文件夹中的文件列表替换。
例如:我的脚本名称是,并且我在同一目录中script1.sh有另一个文件。script2.sh
脚本的内容是
VAR1=`grep pattern search_file`
echo $VAR1
预期的输出将是
模式是 *
但我得到的输出是
模式是 script1.sh script2.sh
请让我知道我做错了什么。
您只需要引用变量:echo "$VAR1"
如果您查看bash shell 扩展的顺序,您会注意到文件名扩展发生在参数扩展之后。未加引号的变量随后将进行分词和文件名扩展。
您需要使用 \ 转义 *,否则它会将其视为与当前目录中的文件名匹配的通配符。
\*
使用set -fshell 选项将禁用子 shell 和交互式会话中的 globbing。用于set +f再次启用通配符。