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
's는 다음을 echo
제공합니다.
bash-4.3$ echo "$var"
foar\baz
( \b
다음으로 확장되었습니다.역행 키이터미널로 전송될 때 한 문자 뒤로 이동하는 문자).
당신은 원한다printf
임의의 데이터를 출력하는 데 사용(그리고 변수를 인용하는 것을 잊지 마세요):
bash-4.3$ printf '%s\n' "$var"
foo\bar\\baz
그리고 해당 출력이 터미널로 이동하면 sed -n l
예를 들어 제어 문자나 후행 공백 문자가 표시되도록 후처리할 수 있습니다.
또는 해당 백슬래시가 stdout에 출력되지 않았기 때문입니다. 예를 들어:
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
.
답변2
노력하다
myvariable="$(java -jar MyJavaJarFile.jar)"
그리고 "\"도 표시하는 문자열로 저장해야 합니다.