ディレクトリ名 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"

おすすめ記事