bash バージョン "3.2.51(1)-release" (OS: SUSE Linux Enterprise Server 11.1 (x86_64)) のリモート コンピューターでは、変数名で通常のタブ補完を行うことができませんでした。たとえば、次のように入力したいとします。
echo $OLDPWD/
次に、スラッシュの最後で「Tab」を押すと、変数名が古いディレクトリ名(最後のコマンドcd
の前pushd
)に展開されます。これは私のラップトップ(Debian 7、Bash 4.2.37(1)リリース)では機能します。なぜこのSLES bashシェルでは機能しないのでしょうか?
同様に、
echo $OLDP
そして、"P" の終わりで "Tab" を押すと、bash はそれを に補完します$OLDPWD
。これは、SLES 11 bash でも発生しません。
この動作に影響を与える制御変数 (shopt? set?) は何ですか?
答え1
shopt -s direxpand
echo $HOME/<tab>
bash 4.2 では、展開されます。bash echo /home/matt/
4.1 では、これがデフォルトになります。
bash-completion
これは本当に混乱を招く可能性があると思います。私は常にアンインストールするbash-completion
か実行して、complete -r
個々の補完ルールがデフォルトの補完に対して何かおかしなことをしていないか確認します。
$OLDPWD
が実際に設定されている場合、echo $OLDP<tab>
に展開されるはずですecho $OLDPWD
。 何がそれを防ぐのかわかりません。
答え2
C-x $
代わりに、TAB
可能な変数(他の何かではない)の補完を明示的に要求してみてください。
答え3
答えを確認してください urxvt - タブで環境変数を展開ドミトリー・アレクサンドロフ著。
「これは direxpand オプションに関するものです。
$ shopt -s direxpand および $FOO_PATH/
TABで展開されます"