【发布时间】:2017-03-02 16:59:43
【问题描述】:
我正在尝试制作一个小脚本作为此命令的包装器:
$ egrep target /usr/lusers/me/test/*test.txt
/usr/lusers/me/test/1test.txt:target
该目录包含名为 1test.txt 和 2test.txt 的文件,其中一个包含我要查找的一些文本。
这是我的整个脚本,名为mygrep.sh:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
这是输出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
++ egrep targ '/usr/lusers/me/test/*test.txt'
egrep: /usr/lusers/me/test/*test.txt: No such file or directory
注意set -x 输出中文件路径周围的's,并且该命令失败。
现在比较一下这个脚本的变体:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
请注意,唯一的区别是星号与文字文件名。
输出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
++ egrep target /usr/lusers/me/test/1test.txt
target
展开后没有单引号,命令有效。
那么,为什么在有星号时要添加这些单引号,为什么在这种情况下命令会失败?
【问题讨论】:
标签: bash