入力したプロジェクト名とauto cdを含むgitプロジェクトを探したいとします。それは単純なbash関数であるべきですが、それは不思議な動作です。 forループ内の文がすべての値をtrueとして出力する場合 - bash
project() {
target=$1"/.git"
for string in "$(find ~ -name .git -type d -prune)"
do
if [[ $string == *"${target}" ]]
then
echo $string
else
echo 2
fi
done
# cd "$HOME/Work/$1/src"
}
私が見つけたすべてのプロジェクト(文字列値)をエコーした場合、それは適切なプロジェクトのすべてを出力します。また、targetも有効な文字列です。期待される結果は、正しいパスが1回エコーされ、他のすべての値が2になるはずです。 target
がstring
の一部として一致すると問題が発生します。その場合は、必要なものではなく、すべてのプロジェクトを出力します。パターンがプロジェクトと一致しない場合、コードは2
ONCEの値を出力します。たぶん、私がzshを使っているという事実と関係しているかもしれませんが、私は本当に分かりません。
あなたの引用符は、文字列があなたのパターンに一致するので、もしfind' 'の全体の結果は、単一の文字列で作っています全体が印刷されます。 'find'コマンドの一部として文字列のマッチングを行わない理由はありますか?また、マッチしないものも本当に必要ですか?単語の分割は、あなたがそれをやっているやり方でファイルを処理しようとするとあなたのために多くの問題を引き起こすでしょう –