这是一个非常简单的问题,我确信有人在某个地方问过这个问题,但我找不到它。我的 shell 并不是故意设置的,它似乎会吃掉任何涉及问号的单词:
$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin13.4.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ echo a ? = =?
a =
$ not-a-command? echo a
a
$ (?) echo a
a
如果很重要,请注意任何包含问号的单词似乎完全悄无声息地消失了,以至于她的 shell 甚至从未注意到调用以未指定有效可执行文件的单词开头,即使问号不在开头。
答案1
您可能nullglob
启用了 shell 选项;如果通配符不匹配任何内容,这会导致包含通配符(*
或)的任何单词被删除。?
因此,如果您所在的文件夹不包含任何具有单字符名称的文件、文件夹等,?
则不会扩展为任何内容,而是会被删除;同样,not-a-command?
不太可能匹配任何内容,而是将被删除。
要检查是否是这种情况,请运行
shopt nullglob
要取消激活该选项,请运行
shopt -u nullglob
答案2
它就像*
,但它代表单个字符
例如显示三字符根目录:
$ ls -d /???
/bin /dev /etc /lib /mnt /opt /run /sys /tmp /usr /var
请注意,/home
未显示,因为它不匹配
使用[?]
or\?
或 将字符串括在引号 ("foo?"
或'bar?'
)中