[英]bash shell gives weird result when directory exists vs not
好吧,我整天浪费在一个表现很奇怪的脚本上。 我发现了我无法解释的东西。
ny-02-ops:~$ rm -fr roles
ny-02-ops:~$ echo role[blerk]
role[blerk]
ny-02-ops:~$ echo role[sugar]
role[sugar]
ny-02-ops:~$ mkdir roles
ny-02-ops:~$ echo role[blerk]
role[blerk]
这是我的“ WTF”时刻
ny-02-ops:~$ echo role[sugar]
roles
ny-02-ops:~$ mkdir roleb
ny-02-ops:~$ echo role[blerk]
roleb
我知道那里有一个bash
专家可以解释这一点,我将不胜感激知道发生了什么。
英文字母中的方括号匹配其中的一个字符。 如果具有元字符( *
, [...]
等)的glob不匹配文件名,则该glob不变地返回。
echo "role[sugar]"
echo "role[blerk]"
Shell的默认行为是在可能的情况下扩展glob,否则将其保持不变。 但是,有多种方法可以更改此行为。
要将不匹配的glob扩展为空字符串(例如,对于for
循环很有用,例如,如果没有文件匹配,您可能只想跳过该循环),请使用nullglob
:
shopt -s nullglob
如果将glob无法扩展这一事实视为错误,请使用failglob
:
shopt -s failglob
使用shopt -u
取消设置这些shell选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.