linux shell 入门学习笔记8 shell变量

本地变量

定义shell变量,变量名不需要加美元符$。
本地变量只在用户当前的shell生存周期中有效,如:

xiao123@xiao123:~/Downloads$ story_one="大师兄,师傅被妖怪抓走了"
xiao123@xiao123:~/Downloads$ echo ${story_one}
大师兄,师傅被妖怪抓走了
xiao123@xiao123:~/Downloads$ bash    #开启子shell
xiao123@xiao123:~/Downloads$ echo ${story_one}

xiao123@xiao123:~/Downloads$
变量定义

变量名要求:字母,数字,下划线组成,可以是字母或是下划线开头,如:

  • chaoge
  • chao_ge123
  • _chao_get123

变量名严格区分大小写

  • Chao_ge
  • chao_ge

赋值

1. 赋值不加引号
    story_one=大师兄,师傅被妖怪抓走了
2. 赋值单引号
    story_one='大师兄,师傅被妖怪抓走了'
3. 赋值双引号
    story_one="大师兄,师傅被妖怪抓走了"
取出变量值
  • 单引号,所见所得,强引用
  • 双引号,输出引号里所有内容,识别特殊符号,弱引用
  • 无引号,连续的符号可以不加引号,有空格则有歧义,最好使用双引号
  • 反引号,引用命令执行结果,等于${}用法

特殊变量

shell的特殊变量,用在如脚本,函数传递参数使用,有如下特殊的,位置参数变量

$0	获取shell脚本文件名,以及脚本路径
$n	获取shell的第n个参数,n在1-9之间,如$1, $2, $9, 大于9则需要写${10},参数以空格隔开
$#	获取执行shell脚本后面的参数个数
$*	获取shell脚本所有参数,不加引号等于$@作用,加上引号"$*"作用是接收所有参数为单个字符串,"$1 $2.." 空格保留
$@	不加引号效果同上,加引号,是接收所有参数为独立字符串"$1" "$2" "$3"...空格保留
特殊变量实践
xiao123@xiao123:~/Downloads$ cat ./special_test.sh

echo '验证 ${0} ${1} ${2}'
echo "输入 ${0} ${1} ${2}"

echo '验证 $#'
echo "输入参数个数 $#"

echo '验证 $*'
echo "输出参数 $*"

echo '验证 $@'
echo "输出参数 $@"
xiao123@xiao123:~/Downloads$

运行结果:

xiao123@xiao123:~/Downloads$ bash ./special_test.sh 11 22 33
验证 ${0} ${1} ${2}
输入 ./special_test.sh 11 22
验证 $#
输入参数个数 3
验证 $*
输出参数 11 22 33
验证 $@
输出参数 11 22 33
xiao123@xiao123:~/Downloads$
面试题分享
$*$@的区别你了解吗?

$*$@ 都表示传递给函数或者是脚本的所有参数

当$*$@不被双引号包围时,他们之间没有任何区别,都是将接收到的每一个参数看作一份数据,彼此之间可以用空格来分隔。

但是当他们被双引号""包含时,就会有区别了:
"$*"会将所有的参数从整体上看作是一份数据,而不是把每个参数都看做一份数据。
"$@"任然将每个参数都看作一份数据,彼此之间是独立的。

比如传递了5个参数,那么对于"$*"来说,这5个参数会合并到一起形成以份数据,他们之间是无法分割的;而对于“$@”来说,这5个参数是相互独立的,他们是5份数据。

如果使用echo直接输出"$*""$@"做对比,是看不出区别的;但如果使用for循环来逐个输出数据,立即就能看出区别来。

实践

xiao123@xiao123:~/Downloads$ chmod +x different.sh
xiao123@xiao123:~/Downloads$ cat different.sh
#! /bin/bash
echo "print each param from \"\$*\""  #反斜杠是转移符的意思
for var in "$*"
do
    echo "${var}"
done

echo "print each param from \"\$@\""
for var in "$@"
do
    echo "${var}"
done
xiao123@xiao123:~/Downloads$

运行结果

xiao123@xiao123:~/Downloads$ bash different.sh 11 22 33 44
print each param from "$*"
11 22 33 44
print each param from "$@"
11
22
33
44
xiao123@xiao123:~/Downloads$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值