다음 스크립트를 사용하여 디렉토리의 특정 파일을 삭제하기 위해 bash 쉘 스크립트를 사용하고 있습니다.
#!/bin/bash
path=$1
for filename in $path/*; do
if [ -d "$filename" ]; then
echo $filename
rm $filename/*statssys*
fi
done
즉, 지정된 경로 내의 한 수준 깊은 모든 디렉터리를 반복하고 statssys
해당 이름에 포함된 모든 파일을 삭제합니다. 문제는 검색된 파일 경로에 또는 와 $filename
같은 숫자 끝부분이 포함되어 있다는 것입니다 . 대괄호는 명령이 실행되기 전에 이스케이프되어야 하는데 , $filename 변수에 숨겨져 있기 때문에 어떻게 해야 할지 모르겠습니다.file_path[8]
file_path[9]
rm
도움을 주시면 감사하겠습니다.
답변1
Bash 스크립팅에는 일반 프로그래머가 빠질 수 있는 함정이 많이 있습니다.
한 가지 규칙은 각 인수를 큰따옴표로 확장하는 것인데, 이것이 주요 문제입니다. 다른 규칙에는 다음이 포함됩니다.echo
임의의 데이터 출력 방지그리고--
옵션을 다른 매개변수와 구분하는 데 사용됩니다 .시작되지만 -
옵션으로 간주되어서는 안 되는 인수를 방지합니다.
귀하의 예에서는 스크립트를 다음과 같이 변경할 수 있습니다.
#!/bin/bash --
path="$1"
for filename in "$path"/*; do
if [ -d "$filename" ]; then
printf '%s\n' "$filename"
rm -- "$filename"/*statssys*
fi
done
더 자세한 설명을 보려면 읽어 보시기 바랍니다.헤비히트 트랩.