バックスラッシュ(\
)とスラッシュ(/
)bashの変数内。私はこのように試してみましたが、うまくいきません:
home_mf = ${home//(\)//(/)}
たとえば、
\a\b\c -> /a/b/c
正しい置換は
home_mf="${home//\\//}"
これは次のように分かれます。
//
すべてを置き換える\\
バックスラッシュ/
と/
スラッシュデモンストレーション:
$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c
読みやすい別の方法は、パターンと置換を引用することです。
home_mf="${home//'\'/"/"}"
これはそれを行います:
home_mf=${home//\//\\} # forward to backward slash
home_mf=${home//\\//} # backward to forward slash
例えば。:
$ 猫slash.sh #!/ bin/bash set -x home =/ aa/bb/cc home_mf = $ {home //\//\\} echo $ home_mf home_mf = $ {home_mf //\\//} echo $ home_mf $ ./slash.sh + home = aa/bb/cc + home_mf = '\ aa\bb\cc' + echo '\ aa\bb\cc' \ aa\bb\cc + home_mf =/aa/bb/cc + echo /aa/bb/cc / aa/bb/cc
${variable/..}
構文はksh
、bash
、およびおそらく他のシェル固有ですが、すべてのBourne Shell構文ベースのシェルに存在するわけではありません。 dash
。ポータブルな方法(POSIX)が必要な場合は、代わりにsed
を使用できます。
home_mf=$(printf "%s" "$home" | sed 's/\//\\/g') # forward to backward slash
home_mf=$(printf "%s" "$home_mf" | sed 's/\\/\//g') # backward to forward slash