PS1のエコテキスト疑問符

PS1のエコテキスト疑問符

私はシェルスクリプトが初めてで、「?」のような色と文字を使ってgitブランチの状態を表示するための良いヒントを提供しようとしています。

追跡されていない新しいファイルがある場合は、PS1が次のように見えるようにしたいと思います。

p/a/t/h/ (staging ?) $

つまり、pwd(ブランチネームスペース疑問符)$

問題を次のコード(〜/ .bashrc)に減らしました。

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo $ifUntrackedFiles
 }

 PS1="`parseGitBranch` $ "

私の問題は、疑問符の前にスペースがあるため、PS1がそれをワイルドカードとして扱い、ディレクトリに存在する単一の文字ファイルを表示することです。

p/a/t/h/ (staging ?) touch a
p/a/t/h/ (staging ?) source ~/.bashrc
p/a/t/h/ (staging a) $

スペースなしでうまく機能しますが、まだポイント名の後にスペースが必要です。

p/a/t/h/ (staging?) $

私も次のことを試しました。

ifUntrackedFiles="$gitBranch"' ?'

echo -e

トークンが出力する前のバックスラッシュ(一時 \?)

PS1から疑問符を削除する方法は?

ありがとうございます!

答え1

Bourneシェルで変数を引用しないもの(つまり$var置換"$var")は例外です。ここで問題はあなたのecho命令です。を使用するとecho ?ディレクトリ?内のすべての単一文字ファイルが変更され、を使用するとecho "?"疑問符がそのまま表示されます。

その後、あなたの機能は次のようになります。

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo "$ifUntrackedFiles"
 }

そして、逆引用符は一重引用符と簡単に混同され、入れ子になりにくいので、代わりに以下を使用してください$(...)

 PS1='$(parseGitBranch) $ '

関連情報