我正在为数组变量搜索一些php代码文件,我遇到了一个我很想理解的问题。
我试图grep:
grep -RF "$array_variable['some_key'][$key_variable]" *
它没有返回任何内容。但是,如果我逃脱第二个美元符号,它会找到具有该模式的行。
grep -RF "$array_variable['some_key'][\$key_variable]" *
手册页中的-F标志表示它将模式视为固定字符串而不是正则表达式。它似乎只处理第一个美元符号。
请帮助我理解grep如何解释此命令。这可能是一个shell问题而不是正则表达式问题吗?
UPDATE 添加了一个额外的数组图层,显示了我不想使用单引号的原因。逃避单引号的工作比美元符号还要多。
答案 0 :(得分:2)
使用单引号而不是双引号。双引号让shell扩展以$
开头的变量名:
grep -RF '$array_variable[$key_variable]' .
对于已修改的问题,您可以在双引号内使用转义$
:
grep -RF "\$array_variable['some_key'][\$key_variable]" .
答案 1 :(得分:0)
我认为您打算使用两个子索引值搜索某些数组变量的出现,并且您不知道方括号对于grep是特殊的,这意味着一类字符。如果您想将${array_variable}
名称和${key_variable}
值替换为grepclassión,您最好使用完整的语法,但最重要的是如果您想要字面上匹配[
和]
括号,您需要逃避它们。如在
grep -RF "${array_variable}\['some_key']\[${key_variable}]"
(只需要转义左方括号)
在这种情况下,如果您有foo
存储在变量array_variable
中的bar
和key_variable
,那么实际的grep命令将是
greep -RF "foo\['some_key']\[bar]"
随着转义到括号,正则表达式将搜索foo的出现,然后是'somk_y
之一,然后是bar
之一,如foo'r
或{{1但是,没有任何类似于带有子索引的数组变量。