在《aix 3.2 指南》一书中,它说可以使用 Korn Shell 命令set -f
来“禁用文件名生成”,但这是什么意思呢?
会发生什么set -f
?
答案1
set -f
是禁用文件名扩展的可移植(即 POSIX)方法。
启用后(默认情况下或使用set +f
),文件名扩展是 shell 执行的一项操作,它会在可能的情况下替换包含以下内容的命令行参数:
- 出现通配符(
?
= 任何单个字符并且*
= 任意数量的字符) - 方括号括起来的范围(例如=到、 或的
[a-z12]
任何字符)a
z
1
2
- 非匹配列表(例如= 不在to
[^a-z]
范围内的任何字符)a
z
- 和字符类(例如
[[:xdigit:]]
= 可用于表示十六进制数字的任何字符)
通过与它们匹配的文件名。
禁用时,这些参数保持不变。
$ pwd
/etc/samba
$ echo *
lmhosts smb.conf
$ echo *o??
smb.conf
$ set -f
$ echo *
*
$ echo *o??
*o??
答案2
在 ksh 和 bash 中,该set -f
命令禁用文件名生成(“路径名扩展”)。它相当于设置noglob
shell 选项(在两个 shell 中)。
它可以防止 shell 扩展文件通配模式:
$ ls -l
total 0
-rw-r--r-- 1 kk kk 0 Dec 30 21:39 hello
-rw-r--r-- 1 kk kk 0 Dec 30 21:39 world
$ echo *l[a-k]
world
$ echo *
hello world
$ set -o noglob
$ echo *
*
$ echo *l[a-k]
*l[a-k]
要恢复(清除)设置,请使用set +f
或set +o noglob
。