为什么以下不起作用(无输出):
fileRe="-regex '.*\.h'"
find "." -type f $fileRe
但以下工作(并输出结果)
find "." -type f -regex '.*\.h'
使用:/c/Program Files/Git/bin/bash
这不直观吗?
答案 0 :(得分:1)
键入find "." -type f -regex '.*\.h'
并按Enter键时,
shell将单引号解释为固定字符串的封闭标记,并使用随附的值作为参数传递给find
命令。
与此相反,当你设置fileRe="-regex '.*\.h'"
时,
双引号中的值存储在 as-is 中(在变量扩展之后),并且字面上是嵌入的单引号。
然后,当您将$fileRe
传递给find
时,
该值是在存储时获取的,
它没有被重新解释,
所以值中的文字单引号仍为字面单引号。
要实现您的目标,您可以使用Bash数组:
fileRe=(-regex '.*\.h')
find . -type f "${fileRe[@]}"
此版本与您的版本的不同之处在于传递给find
的参数为-regex
和.*\.h
。单引号不是值的一部分,因为它们是在创建数组的值时使用的,并且它们没有嵌入到双引号表达式中。
无论操作系统如何,此行为在任何Bash shell中都是相同的。