我遇到了一种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工作流程中是否有如此重大变化的任何原因?
您的原始表格
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command
表示$command
包含7zip运行的输出,因为var=$(...)
会将命令的输出存储到变量中。
所以,
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
不是替代品,而是脚本中的错误的更正。
无论如何,真正的问题。
如果在外壳程序中运行变量分配,则会注意到以下内容:
$ lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
-bash: !'*.config/*': event not found
因此,这行有一个错误,因为当使用双引号时,shell会进行变量替换等"..."
。有问题的项目是!
,因为bash使用它来引用其历史记录中的先前命令。改用单引号:'...'
$ lst1=' -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' '
$ echo $lst1
-x@/home/user/exclude_list2.lst -xr!*.config/* -xr!*.cache/*
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句