Linux shell 脚本“没有那个文件或目录”

h2o*_*dev 3 linux bash sh

我创建了一个 shell 脚本来完成 3 个简单的任务(压缩一个目录,重命名最终文件并删除源目录)。脚本源码如下:

#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
    src= $2"/*";
    dest= $1".zip";

    # Just for test
    echo $src;

    # Commented for now
    #zip -r -j $dest $src
    #mv $dest $1
    #rm -rf $2
else
    echo "Invalid arguments";
fi
Run Code Online (Sandbox Code Playgroud)

当我使用这些参数运行上面的脚本时,出现错误:

./scriptzip.sh /data/file-new /data/file-old

./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何防止外壳程序测试“类似目录”字符串的变量?有什么办法可以跳过吗?

thr*_*rig 8

空格在 shell 中很重要,因为它是在诸如echo foo bar或更糟的命令中划分标记的原因rm -rf /some/where /。因此,赋值不能在 周围包含空格=

foo=/etc/*
echo $foo
Run Code Online (Sandbox Code Playgroud)

变量也可能需要引用,具体取决于您想要在此处进行 glob 扩展和分词(不正确的分词rm可能导致意外(和搞笑)文件系统清理)发生的情况。

echo "$foo"
Run Code Online (Sandbox Code Playgroud)