Linux Bash: 변수를 다른 변수로

Linux Bash: 변수를 다른 변수로

나는 이것을 가지고있다:

echo $MSG | sed -e $'s/;/\\\n/g'

sed의 결과를 $MSG2라는 새 변수에 넣고 싶습니다.

그것은 다음과 같습니다:

$MSG2=echo $MSG|sed -e $'s/;/\\\n/g'

어떻게 해야 합니까?

감사합니다!

답변1

작업에는 파이프나 sed가 필요하지 않습니다. bash아래와 같이 내장 명령을 사용하면 이 모든 작업을 보다 효율적으로 수행할 수 있습니다 .

NewMsg=${MSG//;/$'\n'}

${MSG//;/$'\n'}예이다패턴 교체. 각 항목을 ;개행 문자로 바꿉니다 . 결과는 쉘 변수에 저장됩니다 NewMsg.

예를 들어:

$ Msg='1;2;3'
$ NewMsg=${Msg//;/$'\n'}
$ echo "$NewMsg"
1
2
3

노트:

  1. 가장 좋은 방법은 소문자 또는 대소문자 혼합 쉘 변수를 사용하는 것입니다. 시스템은 변수에 모두 대문자를 사용하므로 실수로 변수 중 하나를 덮어쓰는 것을 원하지 않습니다.

  2. 명시적으로 원하지 않는 한분사그리고경로명 확장쉘 변수는 항상 큰따옴표로 묶으십시오. 따라서 사용하고 싶을 때는 echo $MSG대신 사용하십시오 echo "$MSG".

  3. 또한 에코하려는 문자열에 어떤 문자가 포함될지 알지 못하면 echo문제가 발생하며 사용하기에 더 안전하고 이식성이 뛰어납니다 printf '%s\n' "$MSG". 자세한 내용은 Stéphane Chazelas를 참조하세요.echoVS에 대한 매우 유익한 토론printf.

  4. 명령 대체를 사용하는 경우 $(...)쉘은 후행 줄 바꿈을 제거합니다. 이는 종종 도움이 되지만 때로는 이 변경이 불필요할 수도 있습니다.

답변2

다음과 같이 변수에 할당하면 됩니다.

MSG2=$(echo $MSG | sed -e $'s/;/\\n/g')

관련 정보