「cd -」と「cd ~~」の違い

「cd -」と「cd ~~」の違い

バッシュコマンド

cd - 

以前に使用したディレクトリを印刷して変更します。

一方、Bashコマンドは

cd ~-

何も表示せずに以前に使用したディレクトリに直接変更します。

これが唯一の違いですか?各コマンドのユースケースは何ですか?

ベストアンサー1

これには2つのことがあります。まず-、以前のディレクトリに個別に展開します。これは(強調鉱山)セクションcdで説明されています。man bash

-パラメーターは、ディレクトリーを変更しようとする前に $OLDPWD に変換されます。CDPATHの空でないディレクトリ名が使用されているか、最初の引数でディレクトリの変更が-成功すると、新しい作業ディレクトリの絶対パス名が標準出力に書き込まれます。 ディレクトリの変更が成功した場合、戻り値はtrue、それ以外の場合はfalseです。

したがって、簡単な操作でcd -古いディレクトリに戻ってディレクトリ名を出力できます。別のコマンドは、「チルダ拡張」セクションで説明されています。

チルダプレフィックスが a の場合、 ~+シェル変数 PWD の値がチルダプレフィックスに置き換わります。チルダの前に付いている場合、~-シェル変数OLDPWDの値が設定されている場合は置き換えられます。チルダプレフィックスでチルダの後に続く文字が数値Nで構成され、オプションで +aまたはaプレフィックスが追加されると、-チルダプレフィックスはdirs組み込み関数によって表示されるディレクトリスタックの対応する要素に置き換えられます。パラメータとしてプレフィックスと呼ばれます。チルダプレフィックスでチルダの後に続く文字が先行しない数字で構成されている場合、+と見なされます。-+

次の例を見ると、理解しやすくなります。

$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~        ## prints $HOME
/home/terdon
$ echo ~+       ## prints $PWD
/etc
$ echo ~-       ## prints $OLDPWD
/home/terdon/foo

したがって、一般的に言えば、-「古いディレクトリ」を意味します。cd -それがまさにそれがあなたをあなたが来た場所に連れて行く理由です。

主な違いは組み込みcd -固有ですcd。試してみると、echo -1つだけ印刷されます-。これは~-チルダ拡張機能の一部であり、変数のように機能します。だからecho ~-意味のあるものを得ることができます。ここでも使用できますが、cd ~-他のコマンドでも使用できます。たとえば、cp ~-/* .これは次のようになります。cp "$OLDPWD"/* .

おすすめ記事