jarファイルを実行し、jarファイルを実行して生成された出力を変数に保存するシェルスクリプトがあります。
たとえば、
myvariable=$(java -jar MyJavaJarFile.jar)
ただし、以下のjava文を実行すると、出力は/、\、+、=などの特殊文字で構成されます。ただし、変数に保存されると、 \ などの文字は変数から省略されます。
java -jar MyJavaJarFile.jar
abc=\=abc
変数は、実際の出力が.の場合にのみ保存されますabc==abc
。
誰でもこの問題を解決するのに役立ちますか?ありがとうございます.:)
ベストアンサー1
コマンド置換($(cmd)
または`cmd`
(ksh93でも))は、末尾の${ cmd;}
改行文字を引いた標準出力を保存します(その出力以外のシェルにNULバイトが含まれていない場合)。cmd
zsh
バックスラッシュには特別な機能はありません。台無しにすることができる唯一の文字は、NUL文字(および一部のシェルで最初のNULが発生した後のすべての文字)と末尾の改行です。
var=$(printf '%s\n\n\n' 'foo\bar\\baz')
foo\bar\\baz
に保存されます$var
。
これらのバックスラッシュが表示されない場合は、バックスラッシュエスケープシーケンスを解釈するか、実装を使用して$var
正しく存在することを確認していない可能性があります。echo
print
たとえば、UNIX一貫性モードでは、次のものがbash
提供されますecho
。
bash-4.3$ echo "$var"
foar\baz
(\b
拡張バックスペースキー端末に送信したときに1文字をリセットする文字です。
欲しいprintf
任意のデータを出力するために使用されます。(そして変数を引用することを忘れないでください):
bash-4.3$ printf '%s\n' "$var"
foo\bar\\baz
この出力が端末に到達したときにsed -n l
表示されるように、制御文字や末尾の空白文字などを使用して後処理する必要があります。
または、対応するバックスラッシュが標準出力に印刷されない可能性があります。たとえば、
foo() {
printf foo
printf '\\' >&2
printf 'bar\n'
}
この機能を実行するとき:
bash-4.3$ foo
foo\bar
bash-4.3$ var=$(foo)
\bash-4.3$ printf '%s\n' "$var"
foobar
\
成功しない場合は$var
stderrに出力されます。
または、Benjoの答えに対するあなたのコメントからわかるように、出力がまったくないので、そうかもしれませんが、これはbash
。