공백 이름이 포함될 수 있는 파일 목록을 처리하는 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