变量

自定义变量

$ cat variable_scope.sh
#!/bin/sh
echo $a
a=2
echo $a
$ chmod a+x variable_scope.sh
$ a=1
$ ./variable_scope.sh

2
$ echo $a
1

在派生的进程中,$a原本不存在,所以最开始打印的为空,在shell脚本执行完毕后进程结束,派生进程中的$a被销毁,也不会影响到原shell中的$a

$ a=1
$ export a
$ ./variable_scope.sh
1
2
$ echo $a
1

export a会在派生进程时,制作一个a的副本,所以$a最开始是存在的,但是在新进程中对变量的修改不会影响到原来的变量。

$ a=1
$ source ./variable_scope.sh
1
2
$ echo $a
2

source会使用本地的进程运行shell脚本,所以a在最开始是存在的,同时对a的修改也会影响到本地的a

内建变量

当运行cmd.sh arg1 arg2 arg3时,有一些内建的变量会自动设置

  • $0: cmd.sh,程序名
  • $1: arg1,第一个参数
  • $2: arg2,第二个参数
  • $3: arg3,第三个参数
  • $#: 3,参数列表元素个数
  • $@: arg1 arg2 arg3,所有参数
  • $*,忽略"后解析出的所有参数
  • shift,移除参数列表的第一个参数

$?,上一个命令的退出值,正常退出为0

$$,当前运行shell的PID
$!,上一个后台运行的命令的PID

IFS,中间字段分隔符

#!/bin/sh
old_IFS="$IFS"
IFS=:
echo "Please input some data separated by colons(:) ..."
read x y z
IFS=$old_IFS
echo "x is $x y is $y z is $z"

默认值

  • :-,变量为null时使用默认值
  • :=,变量未定义时使用默认值
$ # 变量为null
$ a=""
$ echo ${a:-loki}
loki
$ # 变量未定义
$ echo ${b:=maomi}
maomi
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容