내 시나리오에서 *가 때때로 정규식으로 해석되지 않는 이유는 무엇입니까?

내 시나리오에서 *가 때때로 정규식으로 해석되지 않는 이유는 무엇입니까?

아래 첫 번째 명령이 작동하는 이유를 이해할 수 없습니다. expr 명령을 사용할 때 *를 이스케이프해야 합니다. 제 생각에는 *는 BRE의 일부이므로 항상 이스케이프되어야 하며 따라서 "아무것도" 나타내지 않도록 이스케이프되어야 합니다. 그래서 첫 번째 명령이 실제로 작동하는 이유를 이해할 수 없습니다.

$  a=2; b=3; echo $((a*b))
6
$ var1=$(expr 2 * 3) ; echo $var1
expr: syntax error: unexpected argument ‘Desktop’
$ var1=$(expr 2 \* 3) ; echo $var1
6

답변1

그것을 사용할 때산술 확장

표현식은 큰따옴표 내에서와 동일한 확장을 거칩니다.

그러나 expr(1)을 사용하면 모든 것을 명령줄 인수로 전달하므로 모든 일반 제약 조건이 적용됩니다.쉘 확장포함하다파일 이름 확장자(현학적이어야 하기 때문에 정규식 대신 와일드카드를 사용합니다.)

이것은 ... 불리운다expr 매뉴얼 페이지

셸에서 사용하려면 많은 연산자를 이스케이프하거나 인용해야 합니다.

관련 정보