为什么以下各项不起作用(无输出):
fileRe="-regex '.*\.h'"
find "." -type f $fileRe
但是以下工作(并输出结果)
find "." -type f -regex '.*\.h'
使用: /c/Program Files/Git/bin/bash
这不直观吗?
当您键入find "." -type f -regex '.*\.h'
并按Enter键时,外壳程序会将单引号解释为固定字符串的封闭标记,并使用封闭的值作为传递给find
命令的参数。
与此相反,当您设置时fileRe="-regex '.*\.h'"
,双引号内的值将按原样存储(在变量扩展之后),而嵌入式单引号将按字面值获取。
然后,当您传递$fileRe
给时find
,该值将按存储时的值使用,不会重新解释,因此该值中的文字单引号仍然是文字单引号。
要实现所需的功能,可以改用Bash数组:
fileRe=(-regex '.*\.h')
find . -type f "${fileRe[@]}"
此版本与您的版本的不同之处在于,传递给find
are-regex
和的参数.*\.h
。单引号不是值的一部分,因为它们是在创建数组的值时使用的,并且没有嵌入在双引号表达式中。
在任何Bash shell中,无论使用什么操作系统,此行为都是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句