2017-09-07 1 views
1

WindowsパスをOSXパスに「変換」してFinderで開きます。この関数は、bashでは完全に機能しますが、zshでは使用できません(私はoh-my-zshを使用します)。ZSH:バックスラッシュで文字列をエスケープまたは引用する

問題はそう

"\60_Project\6038_Projekt_Part\05_development\assets\img\facebook"

のような文字列になる03 ...

\、02 \、01 \、それは\、\のFのような特定のバックスラッシュの組み合わせを解析することであり、

"/60_Project/6038_Project_Part_developmentssets/img acebook"

目標は、ちょうど私が同僚からもらったパスに貼り付けること、ですWindowsを使用しています。手動で何かを変更する必要はありません。

私は望む結果を得るために、zshで文字列をエスケープしたり引用したりするにはどうすればよいですか?ここで

は、私が書いたコードです:

function parsewinpath { 
    echo $1 | sed -e 's/\\/\//g' 
} 

function openwinpath { 
    echo "Opening..." 
    open $(parsewinpath "/Volumes/myvolume$1") 
} 

使用法:

openwinpath '\60_Project\6038_Project_Part\05_development\assets\img\facebook' 

結果は、Finderが開くことを、次のようになります。

/Volumes/myvolume/60_Project/6038_Project_Part/05_development/assets/img/facebook 

答えて

1

問題はechoはそれを印刷して、文字列にエスケープシーケンスを解釈しようとしていることです。 echoのいくつかのバージョンでこれが行われます。あなたが-eオプションを渡した場合にのみそれを行うものもあります。出力の一部として "-e"という文字列を出力するものもあります。いくつかは...他のランダムなものです。基本的には、echoにエスケープや " - "で始まるものを与えると、それが何をするのかは分かりません。

オプション1:代わりにprintfを使用してください。書式文字列と実際の文字列を印刷する必要があるため、もう少し複雑ですが、はるかに予測可能です。ああ、二重引用符の変数参照:

function parsewinpath { 
    printf '%s\n' "$1" | sed -e 's/\\/\//g' 
} 

オプション2:@chepnerが指摘したように、あなただけの仕事をするために、echosedをスキップして、全体の混乱、およびパラメータ展開を使用することができます。

function openwinpath { 
    echo "Opening..." 
    open "/Volumes/myvolume${1//\\//}" 
} 
+0

ありがとう、完璧に働いた! – sepiott

0

ちょうど各バックスラッシュをエスケープ別のバックスラッシュ:

openwinpath '\\60_Project\\6038_Project_Part\\05_development\\assets\\img\\facebook'

+0

もし私がそれをするならば、私はバックスラッシュをフォワードスラッシュに変えることができましたが、スクリプトはこの厄介な仕事をしたいです!目標は、Windowsを使用している同僚から得たパスに貼り付けることです。 – sepiott

2

parsewinpathはまったく必要ありません。パラメタ展開を使用してバックスラッシュをスラッシュに置き換えてください。

openwinpath /Volumes/myvolume${1//\\//} 
関連する問題