86479
以下のシェルスクリプトを実行すると、gitのcheckoutまではうまくいくんですけど、以降のcdとechoがうまくいきません。DirectoryNameが空文字で何も表示されません。なぜでしょうか？

```

    #! /bin/bash
    
    echo "put the directory name :"
    read DirectoryName
    cp -r base "./$DirectoryName"
    git checkout -b $DirectoryName
    cd "`pwd`/$DirectoryName"　#　ここから$DirectoryNameが空になってる
    echo "`ls | grep $DirectoryName` directory and branch is created!"
    
```
CC BY-SA 4.0
2022-02-20T11:45:43.007
86477
2022-02-20T15:33:03.543
2022-02-20T15:33:03.543
19110
36091
question
bash
変数の中身が勝手に空になる
* 変数は空になっていません。何かしらの挙動を見て変数が空になっていると勘違いなさっているようです。
  * `cd` コマンドによって `./$DirectoryName` に移動した上で `ls | grep $DirectoryName` をなさっているので、この結果は殆どの場合空になり、空文字が出力されそうです。
  * もしこのシェルスクリプトを `test.sh` みたいなファイルに保存してシェルから `./test.sh` みたいに実行してもカレントディレクトリが `./$DirectoryName` にならないことをもって「`cd` がうまくいかない」と表現されているのであれば、これは間違いです。`./test.sh` のように実行したときにはシェルの上で新しくシェルが立ち上がっており、その中で `cd` され、新しい方のシェルが終了することによって元のシェルに戻ってきます。したがって元のシェルでは `cd` されません。元のシェルで `cd` されるようにするには、実行側でシェルビルトインコマンドの `source` もしくは `.` を使う必要があります: <https://atmarkit.itmedia.co.jp/ait/articles/1712/21/news015.html>
    * あるいはファイルにシェルスクリプトを保存することに拘らないのであれば、`~/.bashrc` で関数として定義してしまうというやり方もあります。

ついでに、`echo "`ls | grep $DirectoryName` directory and branch is created!"`
の部分は単に `echo "$DirectoryName directory and branch is created!"` で良さそうですね。`cd`
の部分も `pwd` を使う必要は無さそうでした。
CC BY-SA 4.0
2022-02-20T12:44:46.897
86479
2022-02-20T12:58:32.487
2022-02-20T12:58:32.487
19110
19110
86477
answer