解释括号grep中的shell变量

解释括号grep中的shell变量,shell,grep,brace-expansion,Shell,Grep,Brace Expansion,我有这样的命令: grep ABC /tmp/dir{1,3,7}/file*.txt 它工作得非常好,但我需要使用如下文件名提取常量: FILENAME="/tmp/dir{1,3,7}/file*.txt" grep ABC $FILENAME 由于大括号的原因,这不起作用。 我该怎么做呢?这是一种可能有用且希望安全的情况: eval grep ABC "$FILENAME" 试验 但是如果我们存储在一个变量中,它会得到文本 $ f=a{1..3} $ echo $f a{1..3}

我有这样的命令:

grep ABC /tmp/dir{1,3,7}/file*.txt
它工作得非常好,但我需要使用如下文件名提取常量:

FILENAME="/tmp/dir{1,3,7}/file*.txt"
grep ABC $FILENAME
由于大括号的原因,这不起作用。 我该怎么做呢?

这是一种可能有用且希望安全的情况:

eval grep ABC "$FILENAME"
试验 但是如果我们存储在一个变量中,它会得到文本

$ f=a{1..3}
$ echo $f
a{1..3}
$ echo "$f"
a{1..3}
$ grep 5 "$f"
grep: a{1..3}: No such file or directory
因此,使用
eval

$ eval echo "$f"
a1 a2 a3
$ eval grep 5 "$f"
a1:5
a2:5
a3:5
这是一种可能有用且希望安全的情况:

eval grep ABC "$FILENAME"
试验 但是如果我们存储在一个变量中,它会得到文本

$ f=a{1..3}
$ echo $f
a{1..3}
$ echo "$f"
a{1..3}
$ grep 5 "$f"
grep: a{1..3}: No such file or directory
因此,使用
eval

$ eval echo "$f"
a1 a2 a3
$ eval grep 5 "$f"
a1:5
a2:5
a3:5

您可以使用
eval
执行以字符串形式给出的命令

dir{1,2,3}在以下命令后转换为字符串:
FILENAME=“/tmp/dir{1,3,7}/file*.txt”


运行
eval grep ABC$FILENAME
以获得所需的输出

您可以使用
eval
执行以字符串形式给出的命令

dir{1,2,3}在以下命令后转换为字符串:
FILENAME=“/tmp/dir{1,3,7}/file*.txt”


运行
eval grep ABC$FILENAME
以获得所需的输出

不要为此使用eval,这不是必需的,也不安全。在bash中:

$ cat file1
abc
$ cat file2
dbf
$ shopt -s nullglob
$ x=( file{1,2} )
$ grep 'b' "${x[@]}"
file1:abc
file2:dbf

如果没有与全局模式匹配的文件名,则会导致数组为空。

不要为此使用eval,这是不必要的,也不安全。在bash中:

$ cat file1
abc
$ cat file2
dbf
$ shopt -s nullglob
$ x=( file{1,2} )
$ grep 'b' "${x[@]}"
file1:abc
file2:dbf

如果没有与全局模式匹配的文件名,则会导致数组为空。

这是我几分钟前回答的:)@fedorqui:是的,我注意到在页面刷新之后……)这就是我几分钟前回答的:)@fedorqui:是的,我注意到在页面刷新之后