どのような状況でパス名のメタ文字をエスケープする必要があるのか混乱しています。次の例を考えてみましょう。
私は次の作業ディレクトリにあります。
$ echo $PWD
/home/helpermethod/foo[b]ar/foo/bar
今私はすべてを後ろからはがしたいですfoo[b]ar
。これを行うためにパラメータ置換を使用しています:/home/helpermethod/foo[b]ar
$ path=$PWD
$ basename=foo[b]ar
$ stripped_path=${path%$basename/*}/$basename
basename文字列を正しくエスケープする必要があるため、これは機能しないようです。
$ basename=foo\[b\]ar
$ stripped_path=${path%$basename/*}/$basename
stripped_path
わかりました、今私が探していたものを見つけました。
$ echo "$stripped_path"
/home/helpermethod/foo[b]ar
しかし、今これが有効なディレクトリかどうかをテストすると
$ [[ -d $stripped_path ]]
このtest
コマンドは常にfalseを返します(つまり、戻り値!= 0)。ここで問題は何ですか?エスケープを解除する必要がありますかstripped_path
?
ベストアンサー1
stripped_path=${path%"$basename"/*}/$basename
リテラル文字列の一致には、パターン一致の代わりに二重引用符を使用します。変数を参照する必要がある状況の1つです。別の状況は次のとおりです。
echo $PWD
上記の内容は次のとおりです。
echo "$PWD"
または、より良い方法は次のとおりです。
printf '%s\n' "$PWD"
または
pwd