명령 값을 변수에 저장하려고 하는데 오류가 발생합니다.
var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'`
그것은 나에게 오류를 준다
var: command not found
답변1
=
예, 변수 할당에서는 셸에서 공백으로 묶을 수 없기 때문에 오류가 발생합니다 . 쉘은 var
인수 =
와 명령 대체가 반환하는 모든 것을 사용하여 호출한 명령을 실행하기를 원하기 때문에 해당 행을 해석합니다(추가로 결과를 단어로 분할하고 인용되지 않았기 때문에 해당 단어에 파일 이름 글로빙을 적용한 후).
대신에
var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )
나는 또한 and 를 자유롭게 제거 grep
하고 cat
백틱을 사용하여 더 이상 사용되지 않는 명령 대체를 백틱을 사용하도록 변경했습니다 $( ... )
.
grep
, 및 를 사용하여 cut
이 작업을 수행 할 수도 있습니다 head
.
var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )
또는 특정 횟수의 일치 후에 중지하도록 선택할 grep
수 있는 경우:-m
var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )
또는 검색 중인 표현식이 실제로 정규 표현식이 아닌 문자열인 경우:
var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )