git branch -r
現在のプロジェクトでは、次のように出力をzshの配列にインポートしようとしています。
% all_branches = ("${(@f)$(git branch -r)}")
ただし、このコマンドを実行すると、端末に次のエラーメッセージが表示されます。
zsh: bad pattern: ( origin/Backplane-Broken-Links
zshの分岐名にスラッシュがある問題があると推論します。 gitの出力を私の配列に送信するときにスラッシュ(および他の特殊文字がある場合は別の特殊文字)を処理する方法はありますか?
答え1
(で借用したzsh
ように)の配列割り当て構文は次のとおりです。bash
zsh
array=( value1 value2
value3...)
両側にスペースを含めることはできません(ただし、配列のメンバーを構成する単語だけでなく、通常どおりに単語を区切るために使用される=
スペース、タブ、または改行文字も内部にあります)。(...)
だからあなたは以下が欲しい:
all_branches=("${(@f)$(git branch -r)}")
または:
all_branches=( "${(@f)$(git branch -r)}" )
または:
all_branches=(
"${(@f)$(git branch -r)}"
)
どのスタイルが好きかによって異なります。
all_branches=(${(f)"$(git branch -r)"})
動作します。空の要素を維持するには、"..."
拡張全体をフラグと組み合わせます。@
gitブランチ名は空にできないと思いますが、とにかく$(...)
削除されることに注意してください。みんな末尾の改行なので、空の分岐が出力の終わりにある場合はとにかく削除されます。ただし、分割を$(...)
防ぐには依然として参照が必要です。$IFS
ちなみに、これはarray = ()
and 関数定義の始まりです:array
=
$ array = ()
function> echo test
$ array
test
$ =
test
しかし:
array = (foo|bar)
コマンドが見つかると、globパターン(存在する場合)と一致するファイルを引数として使用して実行されますarray
。=
(foo|bar)
しかし、ここでは("${(@f)$(git branch -r)}")
有効なグローバルパターンを形成しません。削減。
完全性のために、
array = ( value1 value2 )
シェルrc
(Research Unix V10 および plan9 シェル) で有効な構文です。このシェルではこれを実行できず、echo =
構文エラーが発生します。見積もりが必要です=
。