bashの組み込みコマンドでshoptというコマンドがあるのだが、これを使うことによりbashのオプションの動作を制御する変数の値を変更してやることができる。
色々と便利なオプションも多いので、まとめてみることにする。
確認にには 4.2.46(1)-release
を用いている。
shoptコマンドで設定可能な項目は、以下のコマンドで確認可能だ。
bash
shopt
shell[root@BS-PUB-CENT7-01 ~]# shopt autocd off cdable_vars off cdspell off checkhash off checkjobs off checkwinsize on cmdhist on compat31 off compat32 off compat40 off compat41 off direxpand off dirspell off dotglob off execfail off expand_aliases on extdebug off extglob off extquote on failglob off force_fignore on globstar off gnu_errfmt off histappend on histreedit off histverify off hostcomplete on huponexit off interactive_comments on lastpipe off lithist off login_shell on mailwarn off no_empty_cmd_completion off nocaseglob off nocasematch off nullglob off progcomp on promptvars on restricted_shell off shift_verbose off sourcepath on xpg_echo off
各項目のon/offは以下のようにコマンドを実行することで切り替える。
bash
shopt -s オプション名 # 有効化
shopt -u オプション名 # 無効化
各オプションの簡単な概要については以下。 (参考:Man page of BASH より抜粋)
- autocd … 有効になっている場合、ディレクトリPATHのみを指定すると、cdの引数として指定されたものとみなす(対話型シェルのときのみ)
- cdable_vars … 有効になっている場合、 cdの引数としてディレクトリPATHでない値が指定された場合、その値は変数名として扱われる(変数に代入された値にcdしようとする)
- cdspell … 有効になっている場合、cdの引数でスペルミスがあっても1文字の文字の入れ替わり・欠け・スペルミスであれば自動的に補正してcdをしてくれる(対話型シェルのときのみ)
- checkhash … 有効になっている場合、bashはハッシュ表からコマンドを見つけた際、指定されたコマンドが実際に存在するかどうかを確認する
- checkjobs … 有効になっている場合、対話型シェル終了時に停止中・実行中のジョブを 一覧で表示する(対話型シェルのときのみ)
- checkwinsize … 有効になっている場合、bashはコマンド実行のたびにターミナルのウィンドウサイズを確認して、必要に応じてLINEとCOLUMNの値を更新する
- cmdhist … 有効になっている場合、複数行に分かれているコマンドのすべての行を同一の履歴エントリに登録してくれる(デフォルトで有効)
- compat31 … 有効になっている場合、[[ の =~ 演算子のクォートされた引き数に関してbash 3.1の動作に変更する
- compat32 … 有効になっている場合、[[ の<演算子と>演算子によるロケール固有の文字列比較に関してbash 3.2 の動作に変更する
- compat40 … 有効になっている場合、[[ の < 演算子と > 演算子によるロケール固有の文字列比較とコマンドリストの解釈の効果に関して、bash 4.0 の動作に変更する
- compat41 … 有効になっている場合、bashがposixモードのときにダブルクォートの中のパラメータ展開時にシングルクォートを特殊文字として扱う
- direxpand … 有効になっている場合、bashは変数指定時に、ディレクトリ名が存在する場合はtab補完する際に変数を展開するようになる
- dirspell … 有効になっている場合、bashは指定されたディレクトリ名が存在しない場合、補完する際にスペルの修正を試みる
- dotglob … 有効になっている場合、.(ドット)ではじまるファイルもワイルドカードでマッチするようにする
- execfail … 有効になっている場合、組み込みコマンドであるexecの引数として渡されたコマンドが実行できない場合でも、非対話的なシェルが終了せず次の処理にを開始するようになる
- expand_aliases … 有効になっている場合、エイリアスが展開されるようになる(対話型シェルであればデフォルトで有効)
- extdebug … 有効になっている場合、デバックのための動作が有効になる
- extglob … 有効になっている場合、拡張されたパターンマッチング機能が利用できるようになる
- extquote … 有効になっている場合、ダブルクォート中の${変数}の展開で、$'string'と$"string"のクォートが機能するようになる(デフォルトで有効)
- failglob … 有効になっている場合、パス名展開でパターンがファイル名のマッチに失敗すると展開エラーになる
- force_fignore … 有効になっている場合、単語補完時にシェル変数FIGNOREで指定されたサフィックスの単語は無視される(デフォルトで有効)
- globstar … 有効になっている場合、** というパターンがパス名展開で使われる場合、深さ0以上のディレクトリやサブディレクトリの全てのファイルにマッチする。直後に/が続く場合には、ディレクトリとサブディレクトリのみにマッチする
- gnu_errfmt … 有効になっている場合、bashのエラーメッセージはGNU標準フォーマットで出力されるようになる
- histappend … 有効になっている場合、の終了時に変数 HISTFILE の値で指定しているファイルに履歴が追加され、ファイルへの上書きは行われなくなる
- histreedit … この設定が有効時にreadlineが使われている場合、ユーザは失敗した履歴置換を再編集できる
- histverify … この設定が有効時にreadlineが使われている場合、履歴置換の結果が即座にシェルのパーザに渡されないようなり、結果として得られた行はreadline の編集バッファに読み込まれさらに修正できるようになる
- hostcomplete … この設定が有効時にreadlineが使われている場合、bashは@を含む単語を補完するときにホスト名補完を行おうとする(デフォルトで有効)
- huponexit … 有効になっている場合、対話的なログインシェル終了時にすべてのジョブに対してSIGHUPシグナルを送信する
- interactive_comments … 有効になっている場合、#で始まる行については、その行の#以降の内容を無視させることができる(デフォルトで有効)
- lastpipe … この設定が有効時にジョブ設定も有効出ない場合なら、bashはバックグラウンドでの実行ではないパイプラインの最後のコマンドを現在のシェル環境で実行する
- lithist … この設定とcmdhistが有効の場合、複数行に別れている履歴はセミコロンではなく改行区切りで履歴に保存される
- login_shell … シェルがログインシェルとして使用された場合に有効になる。変更不可。
- mailwarn … この設定が有効、かつbashがメールのチェックに使うファイルが 前回のチェック以降にアクセスされている場合、メッセージ 「The mail in mailfile has been read」が表示される
- no_empty_cmd_completion … この設定が有効時にreadlineが使われている場合、bashは空行に対してコマンド補完を行った際に補完候補をPATHから検索しない
- nocaseglob … 有効になっている場合、glob展開時にファイルの大文字・小文字を区別せずにマッチさせる
- nocasematch … 有効になっている場合、caseや[[での パターンマッチで大文字・小文字を区別せずにマッチさせる
- nullglob … 有効になっている場合、どのファイルにもマッチしないパターンを空文字列に展開する
- progcomp … 有効になっている場合、プログラム補完機能が利用できるようになる(デフォルトで有効)
- promptvars … 有効になっている場合、プロンプト文字列に対してパラメータ展開、コマンド置換、算術式展開、クォート削除が行われる(デフォルトで有効)
- restricted_shell … シェルが制限付きモード(rbashや-rオプションでの起動)で起動した場合に有効になる。変更不可。
- shift_verbose … 有効になっている場合、組み込みコマンドshiftでシフトの回数が位置パラメータの数を超えた場合、エラーメッセージを出力する
- sourcepath … 有効になっている場合、組み込みコマンドsource(.)はPATHの値を利用して引数に与えられたファイルやディレクトリを探す(デフォルトで有効)
- xpg_echo … 有効になっている場合、組み込みコマンドechoはデフォルトでバックスラッシュによるエスケープシーケンスを展開する
いっぱいあるので、便利そうな設定のみを以下で紹介する。
autocd
この設定が有効になっていると、対話モードの時にディレクトリのpathだけを渡せばcdコマンドに渡されたもとのして扱ってくれる。 大体、以下の様な感じ。
shell[root@BS-PUB-CENT7-01 ~]# shopt -u autocd [root@BS-PUB-CENT7-01 ~]# /var/log -bash: /var/log: ディレクトリです [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s autocd [root@BS-PUB-CENT7-01 ~]# /var/log cd /var/log [root@BS-PUB-CENT7-01 log]# pwd /var/log
cdable_vars
この設定を有効にすると、ディレクトリPATHではない値をcdで渡された場合、その値を変数とみなして扱ってくれる。 以下、実行例。
shell[root@BS-PUB-CENT7-01 ~]# OPTDIR=/opt [root@BS-PUB-CENT7-01 ~]# echo $OPTDIR /opt [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -u cdable_vars [root@BS-PUB-CENT7-01 ~]# cd OPTDIR -bash: cd: OPTDIR: そのようなファイルやディレクトリはありません [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s cdable_vars [root@BS-PUB-CENT7-01 ~]# cd OPTDIR /opt [root@BS-PUB-CENT7-01 opt]# pwd /opt
cdspell
この設定を有効にすると、cd時にスペルミスをしたディレクトリを指定しても、存在するディレクトリを推測してよしなにディレクトリを移動してくれる。 以下が実行例。
shell[root@BS-PUB-CENT7-01 ~]# shopt -u cdspell [root@BS-PUB-CENT7-01 ~]# cd /var/lgo/ -bash: cd: /var/lgo/: そのようなファイルやディレクトリはありません [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s cdspell [root@BS-PUB-CENT7-01 ~]# cd /var/lgo/ /var/log/ [root@BS-PUB-CENT7-01 log]# cd /op /opt [root@BS-PUB-CENT7-01 opt]# cd /tmpw /tmp
direxpand
この設定が有効になっている場合、指定された変数の中身がもしディレクトリ(たとえば、「$PWD/」のように末尾にディレクトリがあるなど)だった場合、tabキー押下時に変数を展開してくれる。
shell[root@BS-PUB-CENT7-01 ~]# OPTDIR=/opt [root@BS-PUB-CENT7-01 ~]# echo $OPTDIR /opt [root@BS-PUB-CENT7-01 ~]# ls -la $OPTDIR/ 合計 4 drwxr-xr-x. 5 root root 42 4月 9 00:01 . dr-xr-xr-x. 17 root root 4096 1月 20 00:01 .. drwxr-xr-x. 2 root root 21 4月 9 00:01 test1 drwxr-xr-x. 2 root root 6 4月 9 00:01 test2 drwxr-xr-x. 2 root root 6 4月 9 00:01 test3 [root@BS-PUB-CENT7-01 ~]# ls -la $OPTDIR/ ↓tabキー押下 [root@BS-PUB-CENT7-01 ~]# ls -la $OPTDIR/test ls: /opt/test にアクセスできません: そのようなファイルやディレクトリはありません [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s direxpand [root@BS-PUB-CENT7-01 ~]# ls -la $OPTDIR/ ↓tabキー押下 [root@BS-PUB-CENT7-01 ~]# ls -la /opt/
dirspell
このオプションを有効にすると、間違ったスペルに対してtab補完を行っても補正して推測した値で補完を行ってくれる。 ただ、中間ディレクトリが間違っててもそこを補正してくれないので使いどころによるかも。。。 実際に実行した際の結果が以下。
shell[root@BS-PUB-CENT7-01 ~]# shopt -u dirspell [root@BS-PUB-CENT7-01 ~]# ls -la /var/lag/aud ↓tabキー押下 [root@BS-PUB-CENT7-01 ~]# ls -la /var/lag/aud [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s dirspell [root@BS-PUB-CENT7-01 ~]# ls -la /var/lag/aud ↓tabキー押下 [root@BS-PUB-CENT7-01 ~]# ls -la /var/lag/audit
dotglob
このオプションを有効にすると、ドット(.)で始まる隠しファイルについてもglobのワイルドカードなどのマッチに含めるようにできる。 以下、実行例。
shell[root@BS-PUB-CENT7-01 ~]# ls -la /opt/ 合計 12 drwxr-xr-x. 5 root root 65 4月 9 20:00 . dr-xr-xr-x. 17 root root 4096 1月 20 00:01 .. -rw-r--r--. 1 root root 9 4月 9 20:01 .test -rw-r--r--. 1 root root 5 4月 9 20:01 test drwxr-xr-x. 2 root root 21 4月 9 00:01 test1 drwxr-xr-x. 2 root root 6 4月 9 00:01 test2 drwxr-xr-x. 2 root root 6 4月 9 00:01 test3 [root@BS-PUB-CENT7-01 ~]# cat /opt/.test dot.test [root@BS-PUB-CENT7-01 ~]# cat /opt/test test [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# ls /opt/* /opt/test /opt/test1: test.txt /opt/test2: /opt/test3: [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s dotglob [root@BS-PUB-CENT7-01 ~]# ls /opt/* <span style="color: #ff0000;">/opt/.test</span> /opt/test /opt/test1: test.txt /opt/test2: /opt/test3:
execfail
execfailを有効にすると、非対話でexecコマンドを実行した際に、execコマンドで指定したコマンドが実行できなかった場合でも次の処理が行えるようになる。
shell[root@BS-PUB-CENT7-01 ~]# bash -c 'shopt -s execfail;exec ech a;echo b' bash: 0 行: exec: ech: 見つかりません b [root@BS-PUB-CENT7-01 ~]# bash -c 'shopt -u execfail;exec ech a;echo b' bash: 0 行: exec: ech: 見つかりません
extglob
このオプションを有効にすることで、bashで拡張globが利用できるようになる。 使い方については前にここに記述しているので、そちらを参照してもらいたい。 通常のglobでは利用できない否定でのファイル指定なども扱えるので、結構便利に使えると思う。 以下、実行例。
shell[root@BS-PUB-CENT7-01 ~]# ls -la 合計 44 dr-xr-x---. 4 root root 4096 4月 8 23:52 . dr-xr-xr-x. 18 root root 4096 4月 9 20:24 .. -rw-------. 1 root root 6704 4月 9 19:27 .bash_history -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc drwx------. 3 root root 16 4月 8 23:52 .cache -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc drwxr-----. 3 root root 18 4月 8 23:52 .pki -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc -rw-------. 1 root root 847 1月 19 23:59 .viminfo -rw-------. 1 root root 986 1月 1 2016 anaconda-ks.cfg [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# shopt -s extglob [root@BS-PUB-CENT7-01 ~]# ls -la /work/!(test*) -rw-r--r--. 1 root root 0 4月 9 20:25 /work/tea [root@BS-PUB-CENT7-01 ~]# ls -la /work/!(*10) -rw-r--r--. 1 root root 0 4月 9 20:25 /work/tea -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test1 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test2 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test3 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test4 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test5 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test6 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test7 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test8 -rw-r--r--. 1 root root 0 4月 9 20:24 /work/test9
failglob
この設定を有効にすると、globで該当するファイルが存在しない場合はその時点でNo matchでエラーを返してくれるようになる。 以下、実行例。
shell[root@BS-PUB-CENT7-01 work]# ls -la /work 合計 8 drwxr-xr-x. 2 root root 4096 4月 9 20:34 . dr-xr-xr-x. 18 root root 4096 4月 9 20:24 .. -rw-r--r--. 1 root root 0 4月 9 20:25 tea.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test1.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test10.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test2.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test3.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test4.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test5.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test6.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test7.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test8.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test9.txt [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -u failglob [root@BS-PUB-CENT7-01 work]# ls -la /work/*.bk ls: /work/*.bk にアクセスできません: そのようなファイルやディレクトリはありません [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -s failglob [root@BS-PUB-CENT7-01 work]# ls -la /work/*.bk -bash: 一致しません: /work/*.bk
globstar
この設定を有効にすると、**というワイルドカード指定で対象ディレクトリ配下のすべてのサブディレクトリ、ファイルを再帰的に指定することができる。
shell[root@BS-PUB-CENT7-01 work]# shopt -u globstar [root@BS-PUB-CENT7-01 work]# ls /opt/** /opt/.test /opt/test /opt/test1: test test.txt /opt/test2: test /opt/test3: test [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -s globstar [root@BS-PUB-CENT7-01 work]# ls /opt/** /opt/.test /opt/test1/test.txt /opt/test2/test/test /opt/test /opt/test1/test/test /opt/test3/test/test /opt/: test test1 test2 test3 /opt/test1: test test.txt /opt/test1/test: test /opt/test2: test /opt/test2/test: test /opt/test3: test /opt/test3/test: test
nocaseglob
この設定を有効にすると、globの展開時に大文字・小文字を区別せずに処理を行ってくれるようになる。
shell[root@BS-PUB-CENT7-01 work]# ls -la 合計 8 drwxr-xr-x. 2 root root 4096 4月 9 20:51 . dr-xr-xr-x. 18 root root 4096 4月 9 20:24 .. -rw-r--r--. 1 root root 0 4月 9 20:51 TEST01.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST02.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST03.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST04.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST05.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST06.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST07.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST08.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST09.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST10.txt -rw-r--r--. 1 root root 0 4月 9 20:25 tea.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test1.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test10.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test2.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test3.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test4.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test5.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test6.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test7.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test8.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test9.txt [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -u nocaseglob [root@BS-PUB-CENT7-01 work]# ls -la TEST* -rw-r--r--. 1 root root 0 4月 9 20:51 TEST01.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST02.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST03.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST04.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST05.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST06.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST07.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST08.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST09.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST10.txt [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -s nocaseglob [root@BS-PUB-CENT7-01 work]# ls -la TEST* -rw-r--r--. 1 root root 0 4月 9 20:51 TEST01.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST02.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST03.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST04.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST05.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST06.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST07.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST08.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST09.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST10.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test1.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test10.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test2.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test3.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test4.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test5.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test6.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test7.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test8.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test9.txt
nocasematch
このオプションを有効にすると、case
や[[
でのパターンマッチ時に大文字・小文字を区別しないで比較してくれるようになる。
shell[root@BS-PUB-CENT7-01 work]# shopt -u nocasematch [root@BS-PUB-CENT7-01 work]# if [[ "test" = "TEST" ]]; then echo ok; else echo ng; fi ng [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -s nocasematch [root@BS-PUB-CENT7-01 work]# if [[ "test" = "TEST" ]]; then echo ok; else echo ng; fi ok
nullglob
この設定を有効にすると、glob展開時に該当するものがなかった場合に、エラーではなく0個の文字列として返してくれるようになる。 以下に実行例を記載。
shell[root@BS-PUB-CENT7-01 ~]# cd /work [root@BS-PUB-CENT7-01 work]# ls -la 合計 8 drwxr-xr-x. 2 root root 4096 4月 9 20:51 . dr-xr-xr-x. 18 root root 4096 4月 9 20:24 .. -rw-r--r--. 1 root root 0 4月 9 20:51 TEST01.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST02.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST03.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST04.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST05.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST06.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST07.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST08.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST09.txt -rw-r--r--. 1 root root 0 4月 9 20:51 TEST10.txt -rw-r--r--. 1 root root 0 4月 9 20:25 tea.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test1.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test10.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test2.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test3.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test4.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test5.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test6.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test7.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test8.txt -rw-r--r--. 1 root root 0 4月 9 20:24 test9.txt [root@BS-PUB-CENT7-01 work]# shopt -u nullglob [root@BS-PUB-CENT7-01 work]# echo *.bk *.bk [root@BS-PUB-CENT7-01 work]# shopt -s nullglob [root@BS-PUB-CENT7-01 work]# echo *.bk [root@BS-PUB-CENT7-01 work]#
xpg_echo
この設定を有効にしておくと、echoの動作が-eを付与した際と同様(制御文字をechoした際にそれを展開してくれるようになる)の動きになる。
shell[root@BS-PUB-CENT7-01 work]# shopt -u xpg_echo [root@BS-PUB-CENT7-01 work]# echo "Hello\nworld" Hello\nworld [root@BS-PUB-CENT7-01 work]# echo -e "Hello\nworld" Hello world [root@BS-PUB-CENT7-01 work]# [root@BS-PUB-CENT7-01 work]# shopt -s xpg_echo [root@BS-PUB-CENT7-01 work]# echo "Hello\nworld" Hello world
大体、こんな感じだろうか。 extglobなんかについては日常でも役に立つと思うので、もし日常的に同じ環境でbashを使うなら設定しておくと良いだろう。