나는 bash 스크립트의 초보자이며 다음과 같은 문제가있다. find 나 grep과 선택적 매개 변수로 특정 문자열을 포함하는 파일을 검색 할 수있는 검색 스크립트를 만들고자하고있다. 하나의 마지막 문제, 모든 경우에 조건과 일치하지 않는 * 문자가 붙어 있습니다.bash에서 * = '*'를 만드는 방법은?
내 스크립트에 3 개 개의 매개 변수가 있습니다 : (필수)
- string_to_search는
예 :
./search_text.sh 'string_to_search' 'file_name_pattern' /path
내가 가고 싶다. t 다음
- file_name_pattern이 (따옴표와 함께 또는없이) 지정 또는이다 *되지 않은 경우 => 그렙
- file_name_pattern보다 다른 것 인 경우 * 또는 '*'=> 찾을 + grep을
#!/bin/bash
# ------------------------------------
# Set default values for optional parameters (tests)
if [ ! -z $2 ]
then
FILE_TYPE=$2
echo 'FILE_TYPE : var 2'
else
FILE_TYPE="*"
echo 'FILE_TYPE : *'
fi
if [ ! -z $3 ]
then
LOCATION=$3
echo 'LOCATION : var 3'
else
LOCATION=.
echo 'LOCATION : .'
fi
# ------------------------------------
# Do search/show conditions
if [ "$FILE_TYPE" == \* ];
then
#grep -rn -C 0 --color=always "$1" $LOCATION | less -R;
echo ' => GREP';
else
#find $LOCATION -iname $FILE_TYPE | sort | xargs grep "$1" --color=always -n 2>/dev/null | less -R;
echo '=> FIND';
fi
그냥 테스트 끝에 2 개 에코을 표시하려면이 코드를 실행 :
여기 내 코드입니다.
지금 내 문제 : 나는 다음과 같은 조건을 쓸 수있는 방법 즉
./search_text.sh 'string_to_search' '*.php' /path => works (FIND)
./search_text.sh 'string_to_search' '*' /path => works (GREP)
./search_text.sh 'string_to_search' '*' => works (GREP)
./search_text.sh 'string_to_search' * => ERROR => goes to FIND INSTEAD OF GREP :-(
./search_text.sh 'string_to_search' => works (GREP)
: 통과 할 때
if [ "$FILE_TYPE" == \* ];
그래서 *는 '*'와 동일하게 고려되어야한다 명령 줄에서 매개 변수로 이러한 값을?
스크립트에서 따옴표없이 *를 전달할 때 \ * 조건을 이스케이프 처리해도 일치하지 않습니다. 즉
, 내가 할 싶은 * * = '*'그래서, 다른 명령과 같은 일반 와일드 카드로 어떤 도움
많은 감사를 고려해야합니다!
덕분에 Attila와 Sorpigal ;-) 음, * char를 이스케이프 처리하고 문자열로 취급하는 간단한 방법이 있다고 생각했지만 따옴표로 사용합니다. 도움을 다시 주셔서 감사합니다. – user1186503