コマンドを実行すると
git cherry origin/Server_Dev
私のgitリポジトリで、フォームのコミットのリストを取得します
+ 95b117c39869a810595f1e169c64e728d2d7443d
+ e126f1b996ecf1d2a8cf744c74daa92cce338123
+ 869169a6cb0bbe8f1922838798580a1e74ec3884
+ 667819b617c88bd886dc2001f612b5c7a4d396c3
+ fd41328a84b0a127affa6fe4328c93e933de378c
+ cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
これは良いことです。
次のコードを使用して、bash スクリプト内からこのコマンドを実行し、出力を配列にキャプチャしたいと考えています。
commit_hashes=(`git cherry origin/Dev`)
echo ${commit_hashes[@]}
次の出力が得られます。
+ 95b117c39869a810595f1e169c64e728d2d7443d + e126f1b996ecf1d2a8cf744c74daa92cce338123 + 869169a6cb0bbe8f1922838798580a1e74ec3884 + 667819b617c88bd886dc2001f612b5c7a4d396c3 + fd41328a84b0a127affa6fe432
8c93e933de378c + cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
これは良いことではありません
コミットのリストが文字列として返されますが、使用する前にまず分割する必要があります。いくつか検索した結果IFS=""
、データをキャプチャする前にスクリプトに追加すると、問題が解決することがわかりました。
だから私は自分のコードを編集して読む
IFS=""
commit_hashes=(`git cherry origin/Dev`)
echo ${commit_hashes[@]}
どの出力
+ 95b117c39869a810595f1e169c64e728d2d7443d
+ e126f1b996ecf1d2a8cf744c74daa92cce338123
+ 869169a6cb0bbe8f1922838798580a1e74ec3884
+ 667819b617c88bd886dc2001f612b5c7a4d396c3
+ fd41328a84b0a127affa6fe4328c93e933de378c
+ cfe1807e5d4acc6b5e75f4463dadb3b1c957376f
これで私の現実感は完全になくなりました。
私は物事がなぜそのようなことをしているのかを知りたいので、さらに検索した結果、これは と呼ばれInternal Field Separator
、Unix システムでコマンド インタープリターがパターンをトークンに分割する場所を特定するために使用されていることがわかりました。
これはわかります。
わからないのは
- この変数を空の文字列に設定すると、配列データを適切に処理できるようになったのはなぜですか。
- インタープリターが配列データを処理していることに気づき、それを適切に処理するのではなく、そもそもそのように設定しなければならなかった理由。
- デフォルトでは、スペース、タブ、および改行の文字が含まれているため、内部フィールドセパレーターを空の文字列に設定すると、全体のスキームにどのような影響がありますか。
これらの 3 つの点について頭を悩ませるための助けをいただければ幸いです。