Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

复制代码
[root@12crac1 scripts]# echo $$
2221
表示当前shell进程的id,即pid
$0 当前脚本的文件名
$n 传递给脚本或函数的参数,n是一个数字,表示第几个参数,$1 第一个参数,$2第二个参数
$# 传递给脚本或参数个数
$* 传递给脚本或参数的所有参数
$@ 传递给脚本或参数的所有参数,被双引号(" ")包含时,与$*有所不同
$? 上个命令的退出状态,或函数的返回值
$$ 当前shell的进程id,或函数的返回值
复制代码

测试脚本

复制代码
[root@12crac1 scripts]# /bin/sh test_para.sh abc yyy
File Name: test_para.sh
First Parameter : abc
First Parameter : yyy
Quoted Values: abc yyy
Quoted Values: abc yyy
Total Number of Parameters : 2
[root@12crac1 scripts]# more test_para.sh 
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
复制代码

$*$@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

复制代码
[root@12crac1 scripts]# /bin/sh test_para1.sh "a" "b" "c" "d"
$*= a b c d
"$*"= a b c d
$@= a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d
[root@12crac1 scripts]# more test_para1.sh 
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
    echo "$var"
done
echo "print each param from \$@"
for var in $@
do
    echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
    echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
    echo "$var"
done
复制代码

退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。
退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
$? 也可以表示函数的返回值
[root@12crac1 scripts]# echo $?
0

 

Shell替换:Shell变量替换,命令替换,转义字符

复制代码
[root@12crac1 scripts]# /bin/sh test_s1.sh 
Value of a is 10 
[root@12crac1 scripts]# more test_s1.sh 
#!/bin/bash
a=10
echo -e "Value of a is $a \n"
这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出
\\ 反斜杠
\a 警报,响铃
\b 退格 删除键
\f 换页(FF),将当前位置移到下页开头
\n 换行
\r 回车
\t 水平制表符(tab键)
\v 垂直制表符
可以使用echo 命令的-E禁止转义,默认不转义
复制代码

 

posted @   春困秋乏夏打盹  阅读(266)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2019-08-27 H3C 模拟器 pc与防火墙,交换机相连,在pc cmd下用telnet访问交换机和防火墙
2019-08-27 H3C 模拟器 pc与sw直连 登录web
2019-08-27 H3C 模拟器 pc与sw直连 开启telnet
点击右上角即可分享
微信分享提示