"너무 많은 인수"가 발생하는 이유는 무엇입니까?

"너무 많은 인수"가 발생하는 이유는 무엇입니까?

다음은 3행에 인수가 너무 많다는 것을 알려주는 스크립트의 일부입니다.

#!/bin/bash
export LC_ALL='C'
if [ `echo "*file 2" | grep -o ^.` = '.' ]
then
    echo success
fi

이유를 아는 사람 있나요? 제가 알 수 있는 한, 저는 단지 "*"와 "."라는 두 개의 인수를 비교하고 있을 뿐입니다.

답변1

echo "*file 2" | grep -o ^.인쇄합니다 *.

큰따옴표 이외의 명령 대체가 있으므로 글로빙(일명 와일드카드 일치, 파일 이름 생성) 및 단어 분할이 수행됩니다. 현재 디렉터리가 비어 있지 않으면 *현재 디렉터리의 파일 목록으로 확장됩니다. 각 파일은 명령에서 하나의 토큰이 되며 [이는 구문 오류일 가능성이 높습니다.

문제는 명령 대체에 큰따옴표를 사용하지 않았다는 것입니다.변수 및 명령 대체에는 항상 큰따옴표를 사용하십시오.생략할 타당한 이유가 없는 한.

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

보다쉘 스크립트가 공백이나 기타 특수 문자로 인해 막히는 이유는 무엇입니까?더 자세한 설명을 원하시면.

관련 정보