이런 시나리오가 있어요
VAR = `Some command brings the file path name and assigns it to VAR`
예를 들어 VAR은 /root/user/samp.txt와 같은 값을 가질 수 있습니다.
나는 grep 명령을 원한다
grep HI $VAR
이것은 작동하지 않습니다. /root/user/samp.txt를 열 수 없다는 오류가 발생합니다. cat $VAR을 시도할 때 동일한 오류가 발생합니다.
이 문제를 어떻게 처리합니까?
나는 시도했다
echo $VAR | grep HI
grep HI "$VAR"
콘 쉘 사용
답변1
grep을 요청하신 것을 알고 있지만 제가 올바르게 이해했다면 경로 문자열에서 하위 문자열을 검색하고 싶을 것입니다. just ==
또는 =~
like를 사용하여 이를 달성할 수 있습니다.
[[ "$VAR" == *"HI"* ]] # Does "$VAR" match <stuff>HI<stuff>?
또는
[[ "$VAR" =~ "HI" ]] # Does "$VAR" contain HI?
답변2
명령으로 파일 경로가 할당된 변수가 있습니다.
예를 들어
VAR= grep /adr filename
- 내 파일 이름에 다음과 같은 줄이 있다고 가정합니다./adr/samp.txt
따라서 $VAR을 echo하면 /adr/samp.txt가 표시되지만 cat $VAR 또는 grep에서는 오류가 발생합니다.
VAR=$(grep /adr filename)을 설정하여 이 문제를 해결했습니다. 그런 다음 cat $VAR을 수행할 수 있습니다.
뭐가 문제인지 모르겠어요
고마워요, 아델
답변3
WAF의 [[ "$VAR" =~ "HI" ]]
답변다음은 귀하가 찾고 있는 훌륭한 솔루션입니다 bash
. 그러나 이식 가능한 솔루션을 찾는 사람이 있는 경우 ksh
일반 POSIX 셸(basic ) /bin/sh
에서 로컬로 수행하는 방법은 다음과 같습니다.
[ "$VAR" != "${VAR#*HI}" ]
조심하세요,쉘 모드 구문(일명 "와일드카드")는다른POSIX 정규식 구문에서 파생되었습니다.
이는 인수 확장의 값을 비교하여 다음을 달성 $VAR
합니다 .${VAR#*HI}
하위 문자열 삭제"HI"의 시작과 첫 번째 인스턴스 사이의 모든 항목을 제거합니다(주어진 경우 VAR="OHIO"
선행 ${VAR#*HI}
은 제거되고 . OHI
의 결과 는 변경되지 않습니다).O
VAR="Hi, I am bob"
!=
비교 로 인해 반환 값은 다음과 같습니다.진짜( 0
) 두 문자열이 다른 경우(표현에 "HI"가 존재함 $VAR
) 및잘못된( 1
)가 동일한 경우("HI"는 표현에 존재하지 않음 $VAR
).