나는 bash 스크립트를 작성 중이다. 다음 awk 명령은 일치하는 항목이 있어도 아무 것도 출력하지 않습니다. $ SEARCH_QUERY를 실제 데이터로 바꿀 때 awk 행을 복사했으며 대화 형 쉘에서 성공적으로 실행됩니다. 이것은 awk이 변수 $ SEARCH_QUERY의 데이터를 올바르게 변환하지 않는다고 생각하게합니다. 이 문제를 해결하는 방법이나 bash 관련 주제를 읽는 방법에 대한 아이디어가 있습니까? 작은 따옴표 그렇게 awk
즉 정규식 자체로 $SEARCH_QUERY
을 치료하고, 매개 변수 확장을 억제 - 원래의 코드가 깨진 이유 의 관점에서 당신bash 스크립트 - awk가 정규 변수로 전달 된 변수를 처리하지 않음
search_contacts()
{
echo "Enter contact Name:"
read SEARCH_QUERY
awk ' /$SEARCH_QUERY/ { print $0 }' contacts.db
}
모든 대문자를 쉘에서 자신의 변수 이름을 사용하지 마십시오 - 예 이름은 OS 또는 쉘 자체에 의미가있는 변수에 사용되지만 소문자 이름은 쉘의 설정 또는 조작과 충돌하지 않습니다. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html, 네 번째 단락을 참조하십시오. –
원본 코드가 작동하지 않는 경우 - 즉각적인 * 문제는 작은 따옴표 (확장을 억제 함)를 사용한 다음 확장을 사용하여 데이터를 awk 코드로 대체하는 것입니다. 그러나 * 가장 심각한 * 문제는 데이터를 코드로 대체하기 위해 문자열 대체를 사용하는 것이 었습니다. 핵심 부분에서 이것은 주입 취약점의 근원입니다. SQL 인젝션, 셸 인젝션 및 awk 인젝션과 마찬가지로 존재합니다. awk는 셸 명령을 실행할 수 있기 때문에 임의의 내용을 awk 스크립트로 대체하게하는 것은 시스템에서 임의의 명령을 실행시키는 것과 동일합니다. –
찰리 고마워요. awk 옵션 사용 : search_query는 awk에 의해 실행되는 불쾌한 사용자 삽입 코드의 위험을 방지합니까? – GustavMahler