起底 Linux 系统 Shell 中那些特殊变量
创始人
2025-07-06 10:41:22
0

在Shell脚本中,$符号有多种含义,它通常用于表示变量、特殊变量或参数,今天介绍几个特殊的变量。

  • $0表示shell脚本文件本身
  • $1 ~ $n脚本的位置参数,表示脚本或函数的参数。例如,$1表示第一个参数,$2表示第二个参数,依此类推
  • $#传递给脚本或函数的参数个数
  • $@传递给脚本或函数的所有参数的列表,每个参数是一个独立的单词
  • $?表示上一个命令的退出状态,如果为0表示成功,非零值表示失败
  • $$表示当前脚本或进程的进程ID
  • $!表示后台运行的最后一个进程的进程ID
  • $*表示所有传递给脚本的参数列表(位置参数),并将它们作为一个单词显示
  • $-用于显示当前Shell的选项设置

当运行 echo $- 时,它会输出一个包含不同字母的字符串:

# echo $-
himBH

每个字母的含义如下:

  • h: 启用hash命令功能,用于记住命令的路径,以加快命令的查找速度。
  • i: 启用Shell的交互模式。
  • m: 启用作业控制的多用户模式。
  • B: 启用通知作业完成状态的功能。
  • H: 启用Shell历史功能。

因此,himBH 表示这个Shell当前启用了 hash、交互模式、多用户模式、作业状态通知和历史功能。这些选项可以根据脚本或Shell的需要进行配置

注意:$* 和 $@ 在大多数情况下表现相似,但在处理引号时有一些关键的区别。

[root@localhost]# cat b.sh && bash b.sh 
# 使用 "$*" 和 "$@"
set -- "arg1" "arg2 with space" "arg3"

echo 'Using "$*"'
for arg in "$*"; do
    echo $arg
done

echo 'Using "$@"'
for arg in "$@"; do
    echo $arg
done

Using "$*"
arg1 arg2 with space arg3
Using "$@"
arg1
arg2 with space
arg3

在"$*"中,所有参数被当作单个字符串,参数之间用第一个字符(默认是空格)分隔。而在"$@"中,每个参数都被当作独立的字符串。

在实际使用中,如果希望参数原封不动的传递出去,可能更适合使用"$@",它以类似数组的方式表示传递给脚本的所有参数。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...