2017-04-14 20 views
1

Gitエイリアスをバックスラッシュをスラッシュに変換して、後でfilter-branchコマンドに渡す必要があります(PoshパラメータとしてDOSベースのファイルパスを渡します)。TRを使ってバックスラッシュをスラッシュに変換するGitエイリアスを設定する

だから私はこのエイリアスがあります。

echo-test = "!f() { path=$(echo $1 | tr '\\' '/'); echo $path; }; f" 

をしかし、私はこのエラーを取得する:

tr: warning: an unescaped backslash at end of string is not portable

私は、Gitは、単に\bash単一\を取得をエスケープすることを考えて、tr '\\\\' '/'内部を書いてみました私は同じエラーが発生します。

アイデア?

+0

「\\\\\\\」の8つのバックスラッシュを試しましたか? – kennytm

+0

@kennytm、聖なるくそ、私はあなたが私をやっていると思ったが、それは働いた!フードの下で何が起こっているのですか? 3エスケープ? – Gabrielius

+0

ええ、間違いなく3つのエスケープ( 'tr'に1回)があり、他の2つの上には、おそらくエイリアス定義で1回、bashで1回です。 – kennytm

答えて

1

文字列が3回エスケープされないため、ここに8つのバックスラッシュを記述する必要があります。

echo-test = "!f() { path=$(echo $1 | tr '\\\\\\\\' '/'); echo $path; }; f" 
  1. OPが既に使用しているように、第1の倍増は、trによるものです。
  2. 第二倍は、第三倍増がsh -c "…"を使用してコマンドを実行することによるものであるformat of .gitconfig

    Inside double quotes, double quote " and backslash \ characters must be escaped: use \" for " and \\ for \ .

  3. によるものです。

関連する問題