*正被当前文件夹文件列表替换

时间:2013-04-26 15:26:26

标签: shell unix ksh

我正在对文件执行grep,导致单行输出。此输出具有*作为其中的数据。在shell脚本中,我试图将值赋给变量,但*正在替换为当前文件夹中的文件列表。

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

脚本的内容是

VAR1=`grep pattern search_file`
echo $VAR1

预期输出为

  

模式是*

但我得到的输出是

  

模式是script1.sh script2.sh

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

\*

答案 2 :(得分:1)

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