71853


[Getting Started | Spring Boot with
Docker](https://spring.io/guides/gs/spring-boot-
docker/?fbclid=IwAR06jcelgC4dcHQmPsXWIor0EHfKCDf1uMDAUV2me2w-Mr9NhA6p869R5To)
に

>
[code]

>     mkdir -p build/dependency && (cd build/dependency; jar -xf
> ../libs/*.jar)
>  
[/code]

という記述がありました。この `()`で包まれた部分についての質問になります。

[Bashにおける括弧類の意味 - Qiita](https://qiita.com/yohm/items/3527d517768402efbcb6)

に

> subshellを起動してコマンドを実行する。  
>  ()の中で実行したコマンドは別プロセスで実行されるので、起動したスクリプト内には何も影響を与えない。

とありますが、今回の例だと、何の意図があって、サブシェルで実行しているのでしょうか？  
起動したスクリプトに影響を与えてはいけないものがあったりするのでしょうか？


CC BY-SA 4.0
2020-11-11T02:20:57.783
71851
2020-11-11T02:49:55.940
9008
question
java spring spring-boot shell
なぜわざわざサブシェルで呼び出しているのでしょうか？


> mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)

「cd」によるカレントディレクトリ変更の影響をjarコマンド実行だけに収めておきたいという意図があると思います。

この例に限って言えば、()があってもなくてもあまり差がありませんが、この後に後続のコマンドが続く場合は、カレントディレクトリの変更が後段に及ばないようになると思います。

また、このコマンドを（後で、または他人が、）見返す場合に、
()が付くことでcdとjarが関連付けられた一連のコマンドであることがわかりやすいという効果もあると思います。  
そのような意味でこのコマンドを書いたひとは、cdしてからコマンド実行するという場面では()で囲むという習慣にしているような気がします。


CC BY-SA 4.0
2020-11-11T02:44:36.190
71853
2020-11-11T02:49:55.940
2020-11-11T02:49:55.940
30745
30745
71851
answer