grep
명령에 변수를 전달하는 방법은 무엇입니까 ? 하드코딩된 값이 작동 중입니다.
startingLine=`grep -oP '(2017-01-03 )\w+.+' cv-batch.log | head -1`
echo $startingLine
하지만 변수를 사용하려고 하면 작동이 중지됩니다.
currDate=$(date -d "$dataset_date" +%Y-%m-%d)
echo $currDate
startingLine=`grep -oP '($currDate )\w+.+' cv-batch.log | head -1`
편집하다: 다음을 시도했지만 역시 작동하지 않습니다.
startingLine=`grep -oP '("$currDate" )\w+.+' cv-batch.log | head -1`
답변1
변수는 작은따옴표로 묶여 있으므로 "통과"되지 않습니다. 쉘은 작은따옴표 내에서 변수 확장을 수행하지 않습니다. 다음을 호출하기 전에 쉘이 변수 값을 확장하도록 하려면 큰따옴표를 사용하십시오 grep
.
startingLine="$( grep -oP "($currDate )\w+.+" cv-batch.log | head -1)"
참고하시기 바랍니다,바꾸다실제로는 에 "전달"되지 않지만 grep
유틸리티를 실행할 때 셸에서 사용되는 확장된 값입니다. 먼저 추적( set -x
)을 활성화하여 실행 시 실제로 어떤 일이 발생하는지 확인하고 이어서 추적을 비활성화하여 실행해 보세요 set +x
.
$( ... )
또한 파일 이름 글로빙 및 토큰화와 관련된 문제를 피하기 위해 더 강력하고 더 보기 좋은 명령 대체 구문을 사용 하고 전체 결과 문자열을 인용했습니다.
$currDate
또한 다음 내용을 큰따옴표로 묶어야 합니다 echo
.
echo "$currDate"
또는
printf '%s\n' "$currDate"
바라보다