测验:安全地处理输入与参数
当f="my report.txt"时rm $f做什么?
- 删除一个文件
my report.txt - 尝试同时删除
my和report.txt - 由于没有引号,因此会发生错误。
- 自动添加引号
通过管道传递文件列表时为什么要使用 NUL 分隔符(-print0/-0)?
- 文件名中唯一不能包含的字符是 NUL,因此它作为分隔符是安全的。
- 执行速度总是比逐行处理快。
- 传输长文件名时减少内存使用
- 确保查找结果按文件名顺序排序
将脚本收到的参数传递给另一个命令时,什么是正确的?
cmd $*cmd "$*"cmd "$@"cmd $@
在 rm -- "$f" 中,-- 的作用是什么?
- 之后,该文件将在未经确认的情况下被强制删除。
- 之后,该参数被解释为一个值而不是一个选项。
- 之后,该目录将被递归删除。
- 之后,将跳过错误消息和确认。
getopts ":vo:"中的第一个冒号起什么作用?
- 以下所有选项都是必需的。
- 打开静默错误模式,以便由
:和?分支直接处理。 - 表示这是一个带有值的选项。
为什么用户输入不应该用作eval "grep $input file"?
- 因为 eval 很慢
- 引号消失了,字符也分裂了。
- grep 失败,因为它无法读取此模式
- 这是因为输入中包含的 shell 元字符按原样执行。