この問題には、単純なエスケープ文字を難しくするのに十分な複雑さがあります。私はbashスクリプトを持っており、そのほとんどにはセミコロンで区切られたファイルを読み取るawkスクリプトが含まれています。このテキストファイルのフィールドの1つは、一部のJPEGへのディレクトリパスです。 JPEGを別の場所にコピーしたいのですが、元のディレクトリパスにスペースがあります(そして破損を引き起こす可能性がある他の文字列もあるかもしれません)。問題のディレクトリを一重引用符で囲むことはできません。なぜなら、awkインタプリタが停止し、二重引用符を使用すると、awkのリテラル文字列に変換されるからです。
gawk 4.1.1を使用しています。私が達成しようとしているタスクのいくつかのawkコードは次のとおりです。
imageDirectory = $1;
cpJpegVariable="cp -r " imageDirectory " assets";
#screws up if imageDirectory has spaces and other naughty characters
system(cpJpegVariable);
ベストアンサー1
あなたはそれを使用することができます:
awk '...
cpJpegVariable="cp -r '\''" imageDirectory "'\'' assets";
...'
('
エスケープは必須ではありませんが、awk
シェル'\''
エスケープは必須です。)したがって、awk
変数が展開されるとcpJpegVariable
次のようになります。
cp -r 'file_contain space' assets
これにより、'
自分以外のすべての特殊文字に関する問題を回避できます。一重引用符文字を含めることができる場合は、imageDirectory
エスケープ文字を使用できますgsub()
。例:
awk '{gsub("'\''","'\''\"'\''\"",imageDirectory)}1'