在Windows上的Git Bash中Bash扩展变量不起作用?

时间:2017-02-04 14:59:51

标签: windows git bash

为什么以下不起作用(无输出):

fileRe="-regex '.*\.h'"
find "." -type f $fileRe

但以下工作(并输出结果)

find "." -type f -regex '.*\.h'

使用:/c/Program Files/Git/bin/bash

这不直观吗?

1 个答案:

答案 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中都是相同的。