Composerが追加したパッケージで、次のスクリプト行が見つかりました。
dir=$(echo $dir | sed 's/ /\ /g')
Git Bashで試してみました。
$ echo $(echo "foo\bar\ foo/baz/ qux\\bax\\ " | sed 's/ /\ /g')
foo\bar\ foo/baz/ qux\bax\
これがどのように機能するかを説明できますか?二重バックスラッシュと一致するものはありません。
編集する。
今私の間違いが見えます。 echoで二重バックスラッシュを単一のバックスラッシュに変えることはsedとは何の関係もありません。
od
Git Bashにはありませんが、試してみました。
$ echo "foo\bar\ foo/baz/ qux\\bax\\ " >in.txt
$ echo $(echo "foo\bar\ foo/baz/ qux\\bax\\ " | sed 's/ /\ /g') >out.txt
$ cmp -l in.txt out.txt
27 40 12
cmp: EOF on out.txt
。 1文字以上out.txt
短いですin.txt
。
sed 's/ /\ /g'
しかし、私はまだそれが実際に何をしているのか、なぜするのか理解していません。
文脈全体が観客にとって役に立ちますか?
#!/usr/bin/env sh
dir=$(d=${0%[/\\]*}; cd "$d"; cd "../squizlabs/php_codesniffer/scripts" && pwd)
# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
# Cygwin paths start with /cygdrive/ which will break windows PHP,
# so we need to translate the dir path to windows format. However
# we could be using cygwin PHP which does not require this, so we
# test if the path to PHP starts with /cygdrive/ rather than /usr/bin
if [[ $(which php) == /cygdrive/* ]]; then
dir=$(cygpath -m $dir);
fi
fi
dir=$(echo $dir | sed 's/ /\ /g')
"${dir}/phpcs" "$@"
ベストアンサー1
これはsed
関係ありません。あなたが見ることは実際にecho
それ自体で行われます。
$ echo "foo\bar\ foo/baz/ qux\\bax\\ "
foo\bar\ foo/baz/ qux\bax\
\
他の文字をエスケープするために使用されるからです。\\
「エスケープ」を意味するので、1つだけ\
印刷されます。sed
入力スペースのエスケープなどの便利な作業を実行するには、次のものが必要です。
$ echo "foo\bar\ foo/baz/ qux\\bax\\ " | sed 's/ /\\ /g'
foo\bar\\ foo/baz/\ qux\bax\\