如果我们通过以下命令创建一个 tar ball 文件
tar -cvf Docs.tar $HOME/Documents/*
那么在创建 tar 球后,是否可以使用 gzip 或 bzip2 或 xz 或其他压缩实用程序来压缩 tar 文件?
我知道我们可以在创建 tar 时提供选项--bzip2
或--xz
或, 但如果不这样做会怎么样?创建 tar 后,将尝试应用压缩。这可能吗?如果可以,那么如何做?--gzip
-cvf
如果我们通过以下命令创建一个 tar ball 文件
tar -cvf Docs.tar $HOME/Documents/*
那么在创建 tar 球后,是否可以使用 gzip 或 bzip2 或 xz 或其他压缩实用程序来压缩 tar 文件?
我知道我们可以在创建 tar 时提供选项--bzip2
或--xz
或, 但如果不这样做会怎么样?创建 tar 后,将尝试应用压缩。这可能吗?如果可以,那么如何做?--gzip
-cvf
我在某处读到过,在 shell 脚本中,[..]
像例如这样的构造[ -e $HOME/temp ]
符合 POSIX 标准。而[[..]]
像这样的脚本构造[[ -e $HOME/temp ]]
则不符合。
这是真的吗?
除了符合 POSIX 规范之外,[..] 是否比 [[..]] 具有其他固有优势?反之亦然?
有以下方法可以检查 Linux/Unix Shell 脚本中变量是否可用
[ ! -z "${MYVARIABLE}" ]
或者
[ -n "${MYVARIABLE}" ]
或者
[[ ! -v MYVARIABLE ]]
这三者有什么区别?什么时候应该优先使用其中一个?此外,如果我们尝试将它们组合起来,则会出现错误。例如,如果我们给出以下代码,它会正常工作
if [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
但是如果我们尝试执行以下操作
if [[ ! -v MYVARIABLE ]] && [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
然后 shell 脚本返回一个错误消息,“ [:-v: 意外运算符”
这里给出的 -z 和 -n 运算符之间的区别只是表明 -z 检查字符串是否为空,而 -n 检查字符串是否不为空