bash: 変数名がタブ補完で展開されない

bash: 変数名がタブ補完で展開されない

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 direxpandecho $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で展開されます"

関連情報