Linux中变量#,@,0,1,2,*,$$,$?的含义

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9

$$ 是脚本运行的当前进程ID

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

$-记录着当前设置的shell选项


区别:@* 相同点:都是引用所有参数

  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在12 3)则"*" 等价于 “12 3"(传递了一个参数);而“@" 等价于 "1""2" "$3"(传递了三个参数)

例子一

##dels.sh

echo "number:$#"

echo "scname:$0"

echo "first :$1"

echo "second:$2"

echo "argume:$@"

echo "show parm list:$*"

echo "show process id:$$"

echo "show precomm stat: $?"

执行结果


[@jihite]$ sh del.sh 1 2 3

number:3

scname:del.sh

first: 1

second:2

argume:1 2 3

show parm list:1 2 3

show process id:21057

show precomm stat: 0

例子二

#!/bin/sh

num=$#

name=$0

echo "number:$num"

echo "scname:$name"

echo $0

echo $1

echo $2


for ((i=0; i<$num; i++))

do

    echo "$i"

done


echo "argume:$@"

for key in $@

do

    echo $key

done

echo "-----------------"

for key in "$@"

do

    echo $key

done

echo "-----------------------------"

for key2 in $*

do 

    echo $key2

done

echo "-----------------"

for key2 in "$*"

do 

    echo $key2

done


echo "show process id:$$"

cho

echo "show precomm stat: $?"

执行结果


[@jihite]$ sh del.sh a b                                                      

number:2

scname:del.sh

del.sh

a

b

0

1

argume:a b

a

b

-----------------

a

b

-----------------------------

a

b

-----------------

a b

show process id:23582

del.sh: line 37: cho: command not found

show precomm stat: 127


问题:

echo #0 #1 能不能用 $i 表示呢?



$-记录着当前设置的shell选项,himBH是默认值,5个字母分别有各自含义。解释如下:

  • hhashall,打开这个选项后,Shell 会将命令所在的路径记录下来,避免每次都要查询。举例:当h选项开启时,如果将某个自定义命令从/usr/bin/目录下移动到/usr/local/bin/,再运行,会提示无此命令。而当通过set +hh选项关闭后,上述情况就不会出现。
  • iinteractive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,就是输入命令后,shell解释执行,然后返回一个结果。在脚本中,i选项是关闭的。
  • mmonitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。
  • Bbraceexpand,大括号扩展。举例如下:

lenovo@lenovo-DK ~

$ ls

A_File

 

lenovo@lenovo-DK ~

$ cp A_File{,.back_up}

 

lenovo@lenovo-DK ~

$ ls

A_File  A_File.back_up

        如果关闭B选项,那么shell就不会将大括号扩展。

    5.  HhistoryShell 会把我们执行的命令记录下来,可以通过 history 命令查看,每一行是序号 + 执行的命令,在 shell 退出时,会将这些信息保存到~/.bash_history 文件中。如果H选项打开,就可以展开历史列表中的命令,可以通过!感叹号来完成,例如"!!"返回上最近的一个历史命令,"!n"返回第 n 个历史命令,等等。

你可能感兴趣的:(Linux中变量#,@,0,1,2,*,$$,$?的含义)