我遇到了 7z(或 bash,我还不知道)的奇怪行为。使用以下脚本:
#!/bin/bash
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command
另外,最后两行可以很容易地用一行替换:
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
我也尝试过:
command="/usr/bin/7z a $lst1 -v2048M arch0.7z /home/dh ;"
我收到了一个“arch0.7z”文件,但是仍然包含文件夹 .config 和 .cache,同时:
#!/bin/bash
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;"
生成一个包含正确排除文件夹的文件。
因此,我想知道,从变量扩展的行有什么区别:
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
我输入的是:
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user
7z 工作流程发生如此重大变化有什么原因吗?
答案1
这是我没想到的。
lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me
做这个把戏,而我在想-xr!'.配置/‘将结束变量赋值,它实际上作为参数的一部分。此外,如果我的变量是数组,它也能完美运行。
顺便说一句,使用“!”退出是行不通的,7z 会给出“错误:命令行不正确”的提示。