Terminal 全球模式不';t在zsh中展开内部文件
我正在尝试从全局中排除目录 这在命令行中起作用:Terminal 全球模式不';t在zsh中展开内部文件,terminal,zsh,Terminal,Zsh,我正在尝试从全局中排除目录 这在命令行中起作用: $ export exclude=BigDir $ for d in ^$exclude/ ; do echo "$d" ; done SmallDir/ SmallerDir/ $ 但在文件中,它根本不起作用 #!/bin/zsh exclude=BigDir for d in ^$exclude/ ; do echo "$d" ; done 运行/test或以我保存的方式打印文本字符串 如何使其在脚本文件中正确展开?您错误地使用了she
$ export exclude=BigDir
$ for d in ^$exclude/ ; do echo "$d" ; done
SmallDir/
SmallerDir/
$
但在文件中,它根本不起作用
#!/bin/zsh
exclude=BigDir
for d in ^$exclude/ ; do echo "$d" ; done
运行/test
或以我保存的方式打印文本字符串
如何使其在脚本文件中正确展开?您错误地使用了shell使用的全局字符
?
,正则表达式构造^
,$
。示例中的for
循环不能进行正则表达式匹配以排除提供的目录,因为它只进行路径名扩展(又称.glob扩展)
除非您让shell通过在bash
中启用扩展glob选项extglob
和zsh
中启用扩展glob选项extglob
来将^
和$
视为特殊,否则您无法实现您想要做的事情
所以你可能只需要
setopt extendedglob
print -rl ^BigDir*
意思是打印除与
BigDir
匹配的文件名之外的任何内容您错误地使用了shell使用的全局字符?
,正则表达式构造^
,$
。示例中的for
循环不能进行正则表达式匹配以排除提供的目录,因为它只进行路径名扩展(又称.glob扩展)
除非您让shell通过在bash
中启用扩展glob选项extglob
和zsh
中启用扩展glob选项extglob
来将^
和$
视为特殊,否则您无法实现您想要做的事情
所以你可能只需要
setopt extendedglob
print -rl ^BigDir*
意思是除了与
BigDir
匹配的文件名之外,打印任何内容,默认的shell是哪个bash
或zsh
?您已在中为后者定义了解释器script@Inianzsh是我的默认shell哪个shell是你的默认shellbash
或zsh
?您已在中为后者定义了解释器script@Inianzsh是我的默认值我实际上根本不理解这个答案,但将setopt extendedglob
放在脚本文件的顶部修复了我的问题。@唯一的原因是配置文件中可能有setopt extendedglob
,因此,该选项已在交互式shell中启用。该选项不是由脚本运行的shell继承的,这就是为什么需要在脚本中显式打开该选项的原因。我实际上根本不理解这个答案,但是将setopt extendedglob
放在脚本文件的顶部修复了我的问题。@onlygusti您可能在某个配置文件中有setopt extendedglob
,因此该选项已在交互式shell中启用。该选项不会被脚本运行的shell继承,这就是为什么需要在脚本中显式打开该选项的原因。