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