linux - 目录名称 Bash 中的空格

标签 linux bash directory

我是 bash 的新手,我正在编写遍历 tar.gz 文件存档的脚本,并在每个文件中将指定的字符串更改为另一个字符串。脚本参数:存档名称、搜索字符串、目标词。 我的问题是,当存档名称包含空格时(例如,我使用以下参数运行脚本:> change_strings.sh "/tmp/tmp.m7xYn5EQ2y/work/data txt"a A)我有以下错误: 在线 if [ ! -f $文件名];然后 [:数据:预期的二元运算符,目录名:额外的操作数“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

最佳答案

处理此问题的正确方法是用双引号将变量括起来。

var=/foo/bar baz
CMD $var # CMD /foo/bar baz

上面的代码会在/foo/bar 和 baz 上执行 CMD

CMD "$var"

这将在“/foo/bar baz”上执行 CMD。在大多数地方始终用双引号将变量括起来是最佳做法。

关于linux - 目录名称 Bash 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574741/

相关文章:

python - 使用python在目录中搜索文件夹和文件

linux - 在 shell 脚本中修改导出的变量

linux - 如何在 linux 中排序和计算行的出现次数

python - 如何在python中检查目录是否有音乐文件?

linux - 从列表中读取并打印主机名在特定端口上打开

bash - Flutter 桌面 - 将 PDF 发送到打印机

Linux,如何使用目录名创建文件?

linux - 如何在linux上设置交叉编译器?

linux - 从源代码编译 LAMP - apache2 错误 "no MPM package installed"

linux - 我应该查看 VmSize、VmRSS 还是 Linux 上内存统计信息的某种组合?