Korn Shell 中的“set -f”有什么作用?

Korn Shell 中的“set -f”有什么作用?

在《aix 3.2 指南》一书中,它说可以使用 Korn Shell 命令set -f来“禁用文件名生成”,但这是什么意思呢?

会发生什么set -f

答案1

set -f是禁用文件名扩展的可移植(即 POSIX)方法。

启用后(默认情况下或使用set +f),文件名扩展是 shell 执行的一项操作,它会在可能的情况下替换包含以下内容的命令行参数:

  • 出现通配符(?= 任何单个字符并且*= 任意数量的字符)
  • 方括号括起来的范围(例如=到、 或的[a-z12]任何字符)az12
  • 非匹配列表(例如= 不在to[^a-z]范围内的任何字符)az
  • 和字符类(例如[[:xdigit:]]= 可用于表示十六进制数字的任何字符)

通过与它们匹配的文件名。

禁用时,这些参数保持不变。

$ pwd
/etc/samba
$ echo *
lmhosts smb.conf
$ echo *o??
smb.conf
$ set -f
$ echo *
*
$ echo *o??
*o??

答案2

在 ksh 和 bash 中,该set -f命令禁用文件名生成(“路径名扩展”)。它相当于设置noglobshell 选项(在两个 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 +fset +o noglob

相关内容