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':')