git status --porcelain -b
プロンプトで使用するためにfromの出力を解析しようとしていますが、パラメータ拡張を実行すると奇妙な動作が発生します。
このコードは問題を示しています。
#!/bin/bash
IFS=$'\n'
touch ab
status_arr=( $(git status --porcelain -b) )
for (( i=0; i<${#status_arr[@]}; i++ )); do
echo ${status_arr[$i]}
echo ${status_arr[$i]:0:2}
done
きれいなgitディレクトリで実行すると、次のような結果が表示されます。
$ bash sandbox/statusline/issue.sh
## master...origin/master
##
?? ab
ab
??
出力の4行目にエコーが表示されることが予想され、実際にスクリプトをまたはtouch abc
に変更するとtouch a
これが表示されます。
私はこれについて非常に混乱しており、bashで明白なものを見逃しているようですが、インターネット検索では役に立つものは得られません。
これが既知の「もの」である場合、それを回避するか完全に避ける方法はありますか?
ベストアンサー1
?
ファイル名を一致させるために使用されるシェルグローバル文字。単一文字と一致します。したがって、名前のファイルがあるため、ab
この??
パターンはそのファイルと一致します。
これが起こる理由は、パラメータ拡張がいいえリーダー。