Shell十三问:ChinaUnix精华贴详解

需积分: 9 1 下载量 154 浏览量 更新于2024-07-27 收藏 395KB PDF 举报
"Shell十三问-ChinaUnix精华贴整理1.pdf" 这篇文档是ChinaUnix论坛上关于Shell编程的精华帖子集合,由用户Lkydeer在2007年整理而成。文档内容详细介绍了13个关于Shell的常见问题及其解答,旨在帮助读者深入理解Shell的用法和原理。 1. **为何叫做shell?** Shell被称为外壳,是因为它是用户与操作系统内核(kernel)之间的接口。用户通过Shell来与kernel交互,执行命令和控制操作系统,而无需直接操作底层的系统调用。 2. **shellprompt(PS1)与CarriageReturn(CR)的关系?** shellprompt(PS1)是Shell提示符的环境变量,用于显示命令行提示。Carriage Return(CR)是回车字符,用于将光标移动到行首。它们的关系在于,当用户输入命令后,Shell会在输出CR时更新PS1,显示新的提示符。 3. **""(双引号)与''(单引号)的区别** 双引号允许变量扩展和特殊字符解析,而单引号则不进行任何扩展,保持字符串原样。 4. **var=value与export的区别** `var=value`定义了一个局部变量,只在当前shell会话中有效。而`export`关键字使得变量成为环境变量,可供子进程使用。 5. **exec与source的区别** `exec`命令用来替换当前shell进程,执行指定的命令。而`source`或`.`命令则在当前shell环境中执行脚本,不需要启动新的shell进程。 6. **()与{}的区别** `()`用于命令组,它在子shell环境中执行命令,而`{}`则在当前shell环境中执行命令,通常用于命令序列。 7. **$(())与$()以及${}的区别** $(())和$()都是用于计算表达式,但$(())在bash中更为通用,而${}主要用于变量替换和参数扩展。 8. **$@与$*的区别** $@和$*都代表所有命令行参数,但$@在双引号中会以每个参数为一个元素,$*则会合并为一个字符串。 9. **&&与||的区别** &&和||是逻辑运算符。前者表示条件执行,如果前一个命令成功,则执行下一个;后者表示错误处理,如果前一个命令失败,则尝试执行下一个。 10. **>与<的区别** - > 用于重定向输出,覆盖或创建文件; - < 用于重定向输入,从文件读取数据。 11. **12.1~12.5:更多关于>与<的细节** 这部分详细讲解了重定向的各种用法,包括追加(>>)、管道(|)、多重重定向、输入/输出重定向组合等。 12. **if与case的选择** if语句适合简单的条件判断,而case语句适用于多分支选择,更灵活且可读性好。 13. **for what? while与until的区别** for循环常用于按固定次数迭代,while和until则根据条件持续执行循环,until会在条件变为真时停止,而while在条件为真时继续。 14. **[^]与[!]的区别** 在正则表达式中,[^字符集]表示不在字符集内的任何字符,而[!字符集]在某些shell中可能表示否定字符集,但在Bash中,应使用[^字符集]。 文档通过这些问题的解答,全面涵盖了Shell的基础和进阶知识,对于学习和理解Shell编程具有很高的参考价值。