디렉토리 이름 Bash의 공백

디렉토리 이름 Bash의 공백

저는 bash를 처음 사용하고 tar.gz 파일의 아카이브를 통과하고 지정된 문자열을 각 파일의 다른 문자열로 변경하는 스크립트를 작성 중입니다. 스크립트 매개변수: 아카이브 이름, 검색 문자열, 대상 단어. 내 문제는 아카이브 이름에 공백이 포함된 경우(예를 들어 다음 매개변수를 사용하여 스크립트를 실행하는 경우: >change_strings.sh "/tmp/tmp.m7xYn5EQ2y/work/data txt" a A) 다음과 같은 오류가 발생한다는 것입니다. 온라인 if [ ! -f $filename ] ; then [:data : 이진 연산자가 필요합니다. 디렉터리 이름: 추가 피연산자 "txt". 이것은 내 코드입니다.

  #!/bin/bash 
  filename="${1##*/}"
  VAR="$1"
  DIR=$(dirname ${VAR})
  cd "$DIR"


if [ ! -f $filename ] ; then
echo "no such archive" >&2
exit 1
fi


if ! tar tf $filename &> /dev/null; then
echo "this is not .tar.gz archive" >&2
exit 1
fi


dir=`mktemp -dt 'test.XXXXXX'`
tar -xf $filename -C $dir  #extract archive to dir
cd $dir #go to argument directory

FILES=$dir"/*"

for f in $FILES
do
sed -i "s/$2/$3/g" "$f"
done

tar -czf $filename * #create tar gz archive with files in current directory
mv -f $filename $cdir"/"$filename #move archive
rm -r $dir #remove tmp directory

답변1

$filename큰따옴표로 묶어야 합니다 ."$filename"

관련 정보