我遇到了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工作流程中是否有任何重大变化的原因?
答案 0 :(得分:1)
这是我不期待的事情。
lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me
诀窍,虽然我认为 -xr!' .config / ' 中的单引号将结束变量赋值,它实际上是作为论证的一部分。 此外,如果我的变量是一个数组,则完美地工作。
顺便说一句,逃避"!"没有工作,7z说"错误:命令行不正确"为了它。