Korn Shellで「set -f」は何をしますか?

Korn Shellで「set -f」は何をしますか?

「aix 3.2 Guide」の本では、Korn Shellコマンドを使用してset -f「ファイル名の生成を無効にする」ことができますが、どういう意味ですか?

どうしたのset -f

答え1

set -fファイル名拡張を無効にする移植可能な(POSIXなど)方法。

有効にすると(デフォルトでまたはを使用してset +f)、ファイル名拡張は、可能であれば、以下を含むコマンドライン引数を置き換えるシェルで実行される操作です。

  • ワイルドカード文字発生(?=任意の単一文字および*=任意数の文字)
  • 角かっこで囲まれた範囲(例:[a-z12]=からまたはまでのすべての文字)az12
  • 一致しないリスト(例:[^a-z]範囲内にない文字)az
  • および文字クラス(たとえば[[:xdigit:]]、16進数を表すために使用できるすべての文字)

一致するファイル名で。

無効にすると、これらのパラメータは変更されません。

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

答え2

kshとbashでは、このset -fコマンドはファイル名の生成(「パス名拡張」)を無効にします。これはnoglob両方のシェルでシェルオプションを設定するのと同じです。

これにより、シェルがファイル・グロービング・パターンを拡張するのを防ぎます。

$ 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

関連情報