正文
选项的用途。在解压缩某个存档文件时,使用
-C
选项来指定要在其中解压缩该文件的目录:
清单 4. 好习惯 2 的示例:使用选项
-C
来解压缩 .tar 存档文件
~ $
tar
xvf -C tmp
/a/b/c
newarc.
tar
.gz
相对于将存档文件移动到您希望在其中解压缩它的位置,切换到该目录,然后才解压缩它,养成使用
-C
的习惯则更加可取——当存档文件位于其他某个位置时尤其如此。
将命令与控制操作符组合使用
您可能已经知道,在大多数 Shell 中,您可以在单个命令行上通过在命令之间放置一个分号 (;) 来组合命令。该分号是 Shell
控制操作符
,虽然它对于在单个命令行上将离散的命令串联起来很有用,但它并不适用于所有情况。例如,假设您使用分号来组合两个命令,其中第二个命令的正确执行完全依赖于第一个命令的成功完成。如果第一个命令未按您预期的那样退出,第二个命令仍然会运行——结果会导致失败。相反,应该使用更适当的控制操作符(本文将描述其中的部分操作符)。只要您的 Shell 支持它们,就值得养成使用它们的习惯。
仅当另一个命令返回零退出状态时才运行某个命令
使用
&&
控制操作符来组合两个命令,以便
仅当
第一个命令返回零退出状态时才运行第二个命令。换句话说,如果第一个命令运行成功,则第二个命令将运行。如果第一个命令失败,则第二个命令根本就不运行。例如:
清单 5. 好习惯 3 的示例:将命令与控制操作符组合使用
~ $
cd
tmp
/a/b/c
&&
tar
xvf ~
/archive
.
tar
在此例中,存档的内容将提取到 ~/tmp/a/b/c 目录中,除非该目录不存在。如果该目录不存在,则
tar
命令不会运行,因此不会提取任何内容。
仅当另一个命令返回非零退出状态时才运行某个命令
类似地,
||
控制操作符分隔两个命令,并且仅当第一个命令返回非零退出状态时才运行第二个命令。换句话说,如果第一个命令
成功
,则第二个命令不会运行。如果第一个命令失败,则第二个命令
才会
运行。在测试某个给定目录是否存在时,通常使用此操作符,如果该目录不存在,则创建它:
清单 6. 好习惯 3 的另一个示例:将命令与控制操作符组合使用
~ $
cd
tmp
/a/b/c
||
mkdir
-p tmp
/a/b/c
您还可以组合使用本部分中描述的控制操作符。每个操作符都影响最后的命令运行:
清单 7. 好习惯 3 的组合示例:将命令与控制操作符组合使用
~ $
cd
tmp
/a/b/c
||
mkdir
-p tmp
/a/b/c
&&
tar
xvf -C tmp
/a/b/c
~
/archive
.
tar
谨慎引用变量
始终要谨慎使用 Shell 扩展和变量名称。一般最好将变量调用包括在双引号中,除非您有不这样做的足够理由。类似地,如果您直接在字母数字文本后面使用变量名称,则还要确保将该变量名称包括在方括号 ([]) 中,以使其与周围的文本区分开来。否则,Shell 将把尾随文本解释为变量名称的一部分——并且很可能返回一个空值。清单 8 提供了变量的各种引用和非引用及其影响的示例。
清单 8. 好习惯 4 的示例:引用(和非引用)变量
~ $
ls
tmp/
a b
~ $ VAR=
"tmp/*"
~ $
echo
$VAR
tmp
/a
tmp
/b
~ $
echo
"$VAR"
tmp/*
~ $
echo
$VARa
~ $
echo
"$VARa"
~ $
echo