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
확장됨백스페이스 키터미널로 전송될 때 한 문자를 다시 설정하는 문자입니다.
당신이 원하는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
.
답변2
노력하다
myvariable="$(java -jar MyJavaJarFile.jar)"
"\"도 표시하는 문자열로 저장해야 합니다.