파일 이름에 공백이 있는 파일 목록 처리

파일 이름에 공백이 있는 파일 목록 처리

공백 이름이 포함될 수 있는 파일 목록을 처리하는 bash 스크립트를 개발하려고 합니다.

(제가 상담해봤는데파일 이름에 공백이 있는 스크립트 문제그리고Bash 스크립트에서 공백을 이스케이프 처리할 수 없는 이유는 무엇입니까?, 하지만 내 스크립트를 완벽하게 만들 수는 없는 것 같습니다. )

이것은 내 스크립트입니다. 실제 프로세스는 더 복잡하므로 file여기서는 간단한 명령으로 단순화했습니다 .

#!/bin/bash

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

allfilestobetesed=$@
for filetobetested in "$allfilestobetested"
do
    file "$filetobetested"
done

스크립트를 어떻게 개선할 수 있나요?

답변1

allfilestobetested가능하다면 변수를 제거해야 할 것입니다.

for filetobetested in "$@"; do
    file "$filetobetested"
done

올바르게 확장됩니다

답변2

당신은 매우 가깝습니다. 먼저 $* 대신 $@를 올바르게 사용했습니다.

쉘 확장에 대해 걱정해야 하므로 "과제처럼 불필요한 것을 사용하지 마십시오. 이렇게 하면 토큰 간의 경계가 제거됩니다. 하지만 당신은하다"@_"을 둘러싸야 합니다.

그래서 우리는:

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

for filetobetested in "$@"
do
    file "$filetobetested"
done

마지막으로 내 bash 디버거http://bashdb.sf.net이런 일에 집중하는 데 도움이 될 수 있습니다.bashdb 매뉴얼 섹션 1.2set -x추적에서 더 많은 정보를 제공 하도록 PS4를 설정하는 방법을 설명합니다 .

답변3

당신은 필요하지 않습니다 "$@":

    for filetobetested
    do
        file "$filetobetested"
    done

관련 정보