it-swarm-ko.com

Shell 변수에 명령 출력 저장

cut을 사용하여 결과를 변수에 할당하려는 작업이 있습니다

var4=echo ztemp.xml |cut -f1 -d '.'

오류가 발생합니다.

ztemp.xml은 명령이 아닙니다

의 가치 var4 할당되지 않습니다. 출력을 할당하려고합니다.

echo ztemp.xml | cut -f1 -d '.'

어떻게해야합니까?

27
Vass

과제를 다음과 같이 수정하십시오.

var4="$(echo ztemp.xml | cut -f1 -d '.')"

$(…) 구문은 command susbtitution 으로 알려져 있습니다.

39
Tok

사용중인 셸에 따라 매개 변수 확장을 사용할 수 있습니다. 예를 들어 bash에서 :

   ${parameter%Word}
   ${parameter%%Word}
          Remove matching suffix pattern.  The Word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a trailing portion of the expanded value of parameter, then  the
          result  of the expansion is the expanded value of parameter with
          the shortest matching pattern (the ``%'' case)  or  the  longest
          matching  pattern  (the ``%%'' case) deleted.  If parameter is @
          or *, the pattern removal operation is  applied  to  each  posi‐
          tional  parameter  in  turn,  and the expansion is the resultant
          list.  If parameter is an array variable subscripted with  @  or
          *,  the  pattern  removal operation is applied to each member of
          the array in turn, and the expansion is the resultant list.

귀하의 경우 다음과 같은 일을 의미합니다.

var4=ztemp.xml
var4=${var4%.*}

문자 #는 문자열의 접두사 부분에서 비슷한 방식으로 작동합니다.

Ksh, Zsh 및 Bash는 모두 다른 명확한 구문을 제공합니다.

var4=$(echo ztemp.xml | cut -f1 -d '.')

일부 글꼴에서는 백틱 (일명 "Grave accent")을 읽을 수 없습니다. $(blahblah) 구문은 적어도 훨씬 더 분명합니다.

일부 쉘에서는 값을 read 명령으로 파이프 할 수 있습니다.

ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done
8
Bruce Ediger

이것은 변수를 할당하는 또 다른 방법으로, 복잡한 코드를 모두 강조 표시 할 수없는 일부 텍스트 편집기에서 사용하기에 좋습니다.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
3
Aquarius Power