19

引数をエコーするだけでなく、必要に応じて(引数に空白や特殊文字が含まれている場合など)エスケープするコマンドはありますか?

1つのスクリプトでコマンドを実行する代わりに、コマンドをエコーするシェルマジックで必要になります。この出力は、最終的にコマンドをより効率的な方法で実行するpythonスクリプトにパイプされます(実際のターゲットpythonスクリプトのmain()メソッドをロードし、指定された引数で実行し、計算されたデータによって追加のパラメーターがキャッシュされます) main()の実行)。

その代わりに、もちろん、すべてのシェルマジックをPythonに移植して、何もパイプする必要がないようにすることができます。

4

1 に答える 1

27

bashを使用すると、printf組み込みに追加のフォーマット指定子%qがあり、対応する引数をわかりやすい方法で出力します。

標準のprintf(1)形式に加えて、%bprintfに対応する引数のバックスラッシュエスケープシーケンスを展開させます(ただし、\c出力を終了し、バックスラッシュを\'削除せず\"\?で始まる8進エスケープに\0は最大4桁を含めることができます)。そして%q、printfは、シェル入力として再利用できる形式で対応する引数を出力します。

したがって、次のようなことができます。

printf %q "$VARIABLE"
printf %q "$(my_command)"

変数またはコマンドの出力の内容を、入力として再度安全に渡すことができる形式で取得します(つまり、スペースをエスケープします)。例えば:

$ printf "%q\n" "foo bar"
foo\ bar

(インタラクティブシェルできれいになるように、改行を追加しました。)

于 2010-04-28T17:55:17.113 に答える