CD用のラッパーを作成するときにcd "$1"の代わりにcd "$@"を使用するのはなぜですか?

CD用のラッパーを作成するときにcd

他の場所では、次のCD関数を見たことがあります。

cd()
{
 builtin cd "$@"
}

$@代わりに使用することをお勧めするのはなぜですか$1

テストディレクトリ "r st"を作成し、この関数を含むスクリプトを呼び出しましたが、何らかの方法で機能しました。

$ . cdtest.sh "r st"

しかし、 $ . cdtest.sh r st使用するかどうかに関係なく"$@"失敗します。"$1"

ベストアンサー1

によると、パラメータを受け入れるからですbash(1)cd

   cd [-L|[-P [-e]] [-@]] [dir]
          Change  the  current  directory to dir.  if dir is not supplied,
          ...

したがって、ディレクトリは$1オプション(-L別のフラグなど)である可能性があるため、実際には存在しない可能性があります。

どのくらい悪いですか?

$ cd -L /var/tmp
$ pwd
/var/tmp
$ cd() { builtin cd "$1"; }
$ cd -L /var/tmp
$ pwd
/home/jhqdoe
$ 

期待どおりに使用しないと、状況が大幅に間違っている可能性がありますcd "$1"

おすすめ記事