比較時にパスを印刷しないようにスクリプトを変更するにはどうすればよいですか?

比較時にパスを印刷しないようにスクリプトを変更するにはどうすればよいですか?
cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
        echo "YES"
else
        echo "NO"
fi
cd -

はい、次のように印刷されます。

YES
/tmp

しかし、私はただ欲しい

YES

答え1

パスを印刷するのがcd -最後のコマンドです。最終作業ディレクトリを表示できるようにパスを印刷します。これはcdオペランド(単一ダッシュ)を使用して呼び出すときに表示される特別な動作です。-この場合、次のようになります。

cd "$OLDPWD" && pwd

cd "$OLDPWD"これを防ぐには(OLDPWD以前の作業ディレクトリの値を保持する特殊変数)を使用できますが、cd /tmp 失敗そしてコード出力NO、そして両方ともcd -予期cd "$OLDPWD"しないディレクトリに移動することができます。

代わりに

(
    cd /tmp
    if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
        echo YES
    else
        echo NO
    fi
)

1つ目は、サブシェルの外部の作業ディレクトリにはcd影響しません。(...)

さらに、テストはより安全で効率的に実行されます。

if [[ $PWD == */tmp ]]; then
    echo YES
else
    echo NO
fi

これPWDは現在の作業ディレクトリのパス名を含み、通常はコマンドの代わりに使用したい変数ですpwd。テストは、単に現在の作業ディレクトリのパス名が文字列で終わるかどうかをテストします/tmp。これはawkコードで実行したいことです(ただし、パス名に改行文字が含まれている場合は失敗します)。

cd入ることができるかどうかを確認したいが/tmp実際には入ることができない場合は、次を使用してください。

( if cd /tmp; then echo YES; else echo NO; fi )

macOSやSolarisなどの外部cdユーティリティを搭載したシステムでは、次のように使用できます。

if /usr/bin/cd /tmp; then
    echo YES
else
    echo NO
fi

外部cdユーティリティは実際に作業ディレクトリを変更するためには使用できませんが、特定のディレクトリに変更するかどうかを判断するなどのテストにはまだ役立ちます。可能でしょう。また、見ることができます「cd」外部コマンドの意味は何ですか?

実行する作業が/tmpディレクトリが存在し、ディレクトリ(またはディレクトリへのシンボリックリンク)であるかどうかをテストする場合、最も一般的なアプローチは使用せず、次cdのテストを使用することです。

if [ -d /tmp ]; then
    echo YES
else
    echo NO
fi

関連情報