grep의 출력을 변수에 할당

grep의 출력을 변수에 할당

bash 스크립트의 변수에 grep 명령의 출력을 할당하려고 하는데 변수가 비어 있습니다. 다음 명령을 실행할 때:

el_value=$(grep '<$2>.*<$2>' $1 | sed -e 's/^.*<$2/<$2/' | cut -f2 -d'>'| cut -f1 -d':')
echo "DEBUG: The value of el_value is '$el_value'"

출력은 다음과 같습니다

DEBUG: The value of el_value is ''

스크립트 외부에서 grep 명령을 실행하고 변수를 실제 값으로 바꾸면 예상한 출력을 얻습니다.


다음은 스크립트의 일부입니다. 이 스크립트를 사용하여 위에 나열된 값을 추가하세요.

#!/bin/bash

if [ $# -ne 3 ]; then
echo 1>&2 'This script replaces xml element’s value with the one provided as a command parameter \n\n\tUsage: $0 <xml filename> <element name> <new value>'
exit 127
fi

el_value=`grep "<$2>.*<$2>" $1 | sed -e "s/^.*<$2/<$2/" | cut -f2 -d'>'| cut -f1 -d':'`
echo "DEBUG: The value of el_value is '$el_value'"

답변1

노력하다:

el_value=$(sed -n "s/.*<$2>\([^:<]*\).*/\1/p" < "$1")

코드에서 문제는 다음과 같습니다.

  • 작은따옴표는 $2확장되지 않았음을 의미합니다.
  • /검색 명령 grep에 닫는 태그가 없습니다 .

답변2

인용 문제인 것 같아요. grep& sed매개변수 내부에 $1있으며 $2간단한 따옴표( )로 인해 '구문 분석되지 않습니다 . 이 시도:

el_value=$(grep "<$2>.*<$2>" $1 | sed -e "s/^.*<$2/<$2/" | cut -f2 -d'>'| cut -f1 -d':')

관련 정보