shell 命令行参数 空格

特殊变量

  1. $#
    表示传递给函数或脚本的所有参数的数量
  2. $* 和 $@
    表示传递给函数或脚本的所有参数

当 $* 和 $@ 不被双引号" “包围时,它们之间没有任何区别,都是将接收到的参数看做一个字符串数组,彼此之间以空格来分隔;
当它们被双引号” "包含时,就会有区别了:

  • "$*"将所有的参数当作一个字符串。
  • "$@"将每个参数当作一个字符串。

源码(不带引号)

#!/bin/bash
echo $# $1 $2

for argv in $@
do
	echo $argv
done
示例1(无空格)
$ ./test.sh abc def
2 abc def
abc
def
$ 

输入两个命令行参数 abc def,以空格符分隔。

示例2(带空格)
$ ./test.sh abc "d e  f"
2 abc d e f
abc
d
e
f
$ 

输入两个命令行参数 abc "d e f",以空格符分隔,第二个参数带空格但是用双引号包含。
"d e f"用双引号包含依然被改变:$2将多个空格压缩为一个空格;$@按空格分割成多个参数。

源码(带引号)

#!/bin/bash
echo $# "$1" "$2"

for argv in "$*"
do
	echo "argv"
done

for argv in "$@"
do
	echo "$argv"
done
示例(带空格)
$ ./test.sh abc "d e  f"
2 abc d e  f
abc d e  f
abc
d e  f
$ 

$2加双引号后保留了原始参数的多空格;$*加双引号后所有的参数变成了一个字符串;$@加双引号保留原始参数的数量和内容不变。

总结

  • "$num"$num
    双引号保留原始参数内部空格;否则会将多空格压缩为一个空格。
  • "$@"$@
    双引号保留原始参数数量和内部空格;否则将参数内部空格解析为分隔符。
  • "$*"$*
    双引号将所有参数合并为一个参数,保留内部空格;否则将参数内部空格解析为分隔符。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怦然心动如往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值