シェルスクリプトで2つのファイルパスを比較する方法

シェルスクリプトで2つのファイルパスを比較する方法

作業ディレクトリとスクリプトを実行する正しいディレクトリを比較しようとしています。以下はシェルスクリプトの抜粋です。

CURR_DIR=echo pwd
echo $CURR_DIR
if [ "$CURR_DIR" == "/proj/project_a/scripts_shell" ]; then
    echo "You are running script from correct directory"
fi

この場合、私は /proj/project_a/scripts_shell (現在の作業ディレクトリ) にいることを確認しましたが、何らかの理由で、if ステートメントでこれを検出できません。そのため、メッセージは印刷されません。

これの何が問題なのですか?

答え1

これを試して:

if [ "$PWD" = "/proj/project_a/scripts_shell" ]; then
    echo "You are running the script from the correct directory" 
fi

問題は、 を実行するとCURR_DIR=echo pwd、シェルがpwd環境変数を にCURR_DIR設定してを呼び出すことですecho。コマンドの出力を変数にキャプチャする必要がある場合は、 を実行するだけですVAR=$(cmd)

答え2

これはBASHでコマンドの結果を文字列に保存するための表記法です

CURR_DIR=$(pwd)

または

CURR_DIR=`pwd`

CURR_DIR=echo pwdこれを入力すると、CURR_DIR単に「pwd」文字列が作成されます。これがecho関数の動作です。たとえば、シェルで次の行を実行します。

echo blah blah blah 

これは blah コマンドでは何も行いません。

関連情報