shell 部分内置变量
创始人
2025-05-31 19:41:22
0

说明

这些变量都是由bash这个程序本身进行修改使用;
其他shell不一定试用;

变量

$_

todo

BASH

当前bash的完整路径;

BASHOPTS

shopt -s打开的选项, 用:分隔;
如果环境变量中定义, 再启动子shell会先读取并启动, 即继承;

$ echo ${BASHOPTS}
checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
$ shopt -s extdebug
$ echo ${BASHOPTS}
checkwinsize:cmdhist:complete_fullquote:expand_aliases:extdebug:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath

可以看到设置了新的shopt, 变量也会变化;

BASHPID

当前上下文的进程号.
$$在某些场景不同; 变量制度; 可unset

$ cat test.sh
#!/bin/bash
echo $$ $BASHPID
(
echo $$ $BASHPID
)
$ ./test.sh
11199 11199
11199 11200

根据结果可以看到BASHPID是实际上下文的, 而$$则是预处理阶段替换;

BASH_ALIASES

一个map类型, 添加会修改这个值, 但是修改这个值不会导致alias改变;
当前环境中定义的alias, 注意alias不会继承, 可以自定义

$ cat test.sh
#!/bin/bash
for keys in ${!BASH_ALIASES[@]};
doecho "$keys:${BASH_ALIASES[$keys]}"
done
$ source test.sh
grep:grep --color=auto
egrep:egrep --color=auto
alert:notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//')"
fgrep:fgrep --color=auto
la:ls -A
ll:ls -alF
l:ls -CF
ls:ls --color=auto

自己定义

$ cat test.sh
#!/bin/bash
alias ll='ls -l'
for keys in ${!BASH_ALIASES[@]};
doecho "$keys:${BASH_ALIASES[$keys]}"
done
$ ./test.sh
ll:ls -l

BASH_ARGC

shopt -s extdebug模式才能试用
数组类型: 栈的形式管理个数和参数, FUNCNAME, BASH_SOURCE则分别对应调用栈函数和文件, BASH_LINENO则对应行号;
记录当前每个函数调用栈的参数个数; BASH_ARGV则同理, 记录每个函数调用栈的所有参数;

$ cat test.sh
#!/bin/bashshopt -s extdebug
function B
{echo ${BASH_ARGC[@]}echo ${BASH_ARGV[@]}
}function A
{B 1 2 3
}
A 4 5 6 7
$ ./test.sh
3 4
3 2 1 7 6 5 4

完整堆栈获取

$ cat test.sh
#!/bin/bashshopt -s extdebug
function B
{CUR=0for ((i=0; i < ${#BASH_SOURCE[@]};i++));doecho -n "\$$i : ${FUNCNAME[$i]} "if [[ ! -z "${BASH_ARGC[$i]}" ]];thenlet CUR+=${BASH_ARGC[$i]}for((j=0;j<${BASH_ARGC[$i]};j++))doecho -n "${BASH_ARGV[$CUR-$j-1]} "done;echo " : ${BASH_SOURCE[$i]} : ${BASH_LINENO[$i]}"elseecho ";"fidone;
}function A
{B 1 2 3
}
A 4 5 6 7
$ ./test.sh
$0 : B 1 2 3  : ./test.sh : 26
$1 : A 4 5 6 7  : ./test.sh : 28
$2 : main ;

相关内容

热门资讯

iPhone手机怎么玩安卓系统... 你有没有想过,你的iPhone手机竟然也能玩安卓系统?没错,就是那个一直以来让你觉得遥不可及的安卓世...
平板删安卓系统更新不了,原因及... 最近是不是你也遇到了这样的烦恼?平板电脑上的安卓系统更新不了,是不是让你头疼得要命?别急,今天就来给...
苹果组装机安卓系统卡,卡顿背后... 你有没有发现,最近用苹果手机的时候,有时候系统有点卡呢?这可真是让人头疼啊!你知道吗,其实这背后还有...
安卓系统原生浏览器,功能与体验... 你有没有发现,每次打开手机,那个小小的浏览器窗口总是默默无闻地在那里,陪你浏览网页、搜索信息、看视频...
安卓机如何上苹果系统,跨平台体... 你是不是也和我一样,对安卓机和苹果系统之间的切换充满了好奇?想象你的安卓手机里装满了各种应用,而苹果...
安卓导入系统证书失败,原因分析... 最近在使用安卓手机的时候,你是不是也遇到了一个让人头疼的问题——导入系统证书失败?别急,今天就来给你...
安卓原生系统有哪些手机,盘点搭... 你有没有想过,为什么有些手机用起来就是那么流畅,那么顺心呢?这背后可大有学问哦!今天,就让我带你一起...
安卓系统关机了怎么定位,安卓系... 手机突然关机了,是不是有点慌张呢?别担心,今天就来教你一招,让你的安卓手机即使关机了,也能轻松定位到...
安卓系统游戏加速器,畅享无延迟... 你有没有发现,手机游戏越来越好玩了?不过,有时候游戏体验可能并不那么顺畅,是不是因为手机性能不够强大...
安卓4系统天气功能,尽在掌握 安卓4系统天气功能大揭秘在当今这个数字化的世界里,手机已经不仅仅是一个通信工具,它更是一个集成了各种...
安卓系统如何玩碧蓝幻想,攻略与... 你有没有想过,在安卓系统上玩《碧蓝幻想》竟然可以这么酷炫?没错,就是那个让你沉迷其中的二次元大作!今...
安卓系统搜不到图朵,图朵生成之... 最近是不是你也遇到了这样的烦恼?手机里明明有那么多美美的图片,但是用安卓系统搜索的时候,却怎么也找不...
魁族8刷安卓系统,系统升级后的... 哇,你知道吗?最近在安卓系统圈子里,有一个话题可是引起了不小的轰动,那就是魁族8刷安卓系统。你是不是...
微信正版安装安卓系统,畅享沟通... 你有没有想过,你的微信是不是正版安装的安卓系统呢?这可不是一个小问题哦,它关系到你的微信使用体验和隐...
电视能刷安卓系统吗,电视也能刷... 电视能刷安卓系统吗?揭秘智能电视的无限可能想象你家的电视不再只是用来观看节目的工具,而是变成了一个功...
安卓系统开通通知功能,畅享智能... 你知道吗?最近安卓系统更新后,新增了一个超级实用的功能——开通通知功能!这可是个大喜事,让咱们的生活...
苹果系统安卓爱思助手,系统兼容... 你有没有发现,手机的世界里,苹果系统和安卓系统就像是一对欢喜冤家,总是各有各的粉丝,各有各的拥趸。而...
安卓系统占用很大内存,揭秘内存... 手机里的安卓系统是不是让你感觉内存不够用,就像你的房间堆满了杂物,总是找不到地方放新东西?别急,今天...
安卓系统p30,安卓系统下的摄... 你有没有发现,最近安卓系统P30在手机圈里可是火得一塌糊涂呢!这不,我就来给你好好扒一扒这款手机的那...
siri被安卓系统进入了,智能... 你知道吗?最近科技圈可是炸开了锅,因为一个大家伙——Siri,竟然悄悄地溜进了安卓系统!这可不是什么...