# bash shell 特殊参数变量

bash shell中有些特殊变量,它们会记录命令行参数。

# 获取传入命令参数的个数

特殊变量$#含有脚本运行时携带的命令行参数的个数。可以在脚本中任何地方使用这个特殊
变量,就跟普通变量一样。

#!/bin/bash
echo "args number: $#"

# ./arg.sh 1 2 3
# args number: 3

# ./arg.sh 1 2
# args number: 2

有了这个获取总参数个数的命令参数后,就可以对命令行参数个数进行校验了。

# !/bin/bash
if [ $# -ne 2 ]; then

        echo Usage: test9.sh a b
else
        total=$[ $1 + $2 ]
        echo The sum is $total
fi
# ./arg.sh 1 2 3
# Usage: test9.sh a b
# ./arg.sh 1 2
# The sum is 3

借助$#参数获取命令行最后一个参数,因为在{}中不能使用$需要使用!号来替换。

#!/bin/bash
echo "Last Number is: ${!#}"
# Last Number is: 3

# 抓取所有的数据

$*$@ 变量可以用来访问所有的命令行参数。这两个变量都能够在单个变量中存储所有的命
令行参数。

$*变量会将命令行上提供的所有参数当作一个单词保存。这个单词包含了命令行中出现的每
一个参数值。基本上 $* 变量会将这些参数视为一个整体,而不是多个个体。

$@ 变量会将命令行上提供的所有参数当作同一字符串中的多个独立的单词。这样就能够遍历所有的参数值,得到每个参数。这通常通过 for 命令完成。

# !/bin/bash

echo "Using the \$* method: $*"
echo "Using the \$@ method: $@"

# Using the $* method: 1 2 3
# Using the $@ method: 1 2 3

从表面上看,两个变量产生的是同样的输出,都显示出了所有命令行参数。通过for命令就可以看出二者的差异了。

#!/bin/bash

count=1
for param in "$*";do
    echo "\$* Parameter #$count = $param"
    count=$[ $count + 1 ]
done

count=1
for param in "$@";do
    echo "\$@ Parameter #$count = $param"
    count=$[ $count + 1 ]
done

# $* Parameter #1 = 1 2 3
# $@ Parameter #1 = 1
# $@ Parameter #2 = 2
# $@ Parameter #3 = 3

(adsbygoogle = window.adsbygoogle || []).push({});