1
回答
Shell字符串替换问题
科大讯飞通用文字识别100000次/天免费使用。立即申请   

我想编写这样一个shell程序:

files="cmd.sh path.sh run.sh myrun.sh test_dnn.sh bin conf steps utils local"

for x in $files; do
  [ ! -e $x ] && echo "$x doesn't exist, it won't be packaged." && ${files#$x}
done

echo "The files in package is: $files"

if [ ! -z "$files" ]; then
  tar -czf mytry.tar.gz $files && echo "package finished."
else
  echo "no file is packaged."
fi

其中,$files中是想打包文件(或者目录)的列表,在第一步中,逐个查找files列表中的文件,如果该文件不存在,则将其从字符串变量$files中删除。接下来,打包这些文件,files这个列表为空了,则不进行打包操作。

但是在测试的时候出现了问题:当如果有文件不在列表中时,用${files#$x}这个命令无法将其中的$x删除掉。我在网上找了半天,在字符串替换时,用的$x部分都是一个固定的字符串,而不是一个变量。有什么方法可以解决这个问题么?

shell的错误提示如下:

conf doesn't exist, it won't be packaged.
./pack_dnn_code.sh: line 12: cmd.sh: command not found
The files in package is: cmd.sh path.sh run.sh myrun.sh test_dnn.sh bin conf steps utils local
tar: conf: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors





<无标签>
举报
Kevin-Garnett
发帖于4年前 1回/246阅
顶部