1

我正在对导致单行输出的文件执行 grep。此输出中包含 * 作为数据。在 shell 脚本中,我试图将值分配给一个变量,但 * 被当前文件夹中的文件列表替换。

例如:我的脚本名称是,并且我在同一目录中script1.sh有另一个文件。script2.sh

脚本的内容是

VAR1=`grep pattern search_file`
echo $VAR1

预期的输出将是

模式是 *

但我得到的输出是

模式是 script1.sh script2.sh

请让我知道我做错了什么。

4

3 回答 3

3

您只需要引用变量:echo "$VAR1"

如果您查看bash shell 扩展的顺序,您会注意到文件名扩展发生参数扩展之后。未加引号的变量随后将进行分词和文件名扩展。

于 2013-04-26T15:41:19.123 回答
1

您需要使用 \ 转义 *,否则它会将其视为与当前目录中的文件名匹配的通配符。

\*
于 2013-04-26T15:32:13.857 回答
1

使用set -fshell 选项将禁用子 shell 和交互式会话中的 globbing。用于set +f再次启用通配符。

于 2013-04-26T15:35:06.083 回答