bash 查看变量函数定义和值 (type declare)

文章详细介绍了LinuxShell中的compgen、type和declare三个命令的用法。compgen用于生成命令补全,type用于查看命令的类型,如内置、别名、文件等。declare则用于声明变量并设置属性,包括数组、函数、只读变量等,还可以输出函数定义的文件位置。
摘要由CSDN通过智能技术生成

查看所有函数

compgen -A function

查看函数定义

  • type指令

type -a function_name

  • declare指令

declare -f function_name

查看函数对应文件

  • delcare

shopt -s extdebug; declare -F function_name

指令解析

  • type

type [-afptP] [name ...]
功能: 对于给定的name, 输出其被当作指令输入时会被解析成什么; 比如set是内置; ls是别名; vim是文件指令;

ch@ch:~/ch$ type -t ls quote set vim if
alias
function
builtin
file
keyword

-t: 仅仅输出类型; 没有name提供则不输出, 返回值也是错误;
-p: name类型是file类型, 则会输出对应文件位置; 类似which;
-a: 输出所有name指令对应所有信息;所有存在位置, aliasfunction也会输出, function输出定义内容; 即可能有多份; 比如type -a ls会输出alias和文件;
-f: 不会搜索function类型;其他的都会搜索alias builtin file keyword;

  • declare

指令格式: declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
基本介绍: 声明变量并添加属性(类型array,maps;作用域之类); 如果没有name参数, 则输出所有变量的值;
-p: 属性和值(一般是变量); 一般只和-f -F使用; 其他属性忽略; 无name则输出所有的变量的属性和值; 属性一般是由其他选项参数提供; -f则限制为函数;
-F: 输出函数定义的文件位置; 函数名和属性会输出; 但是一般需要开shopt -s extdebug, 开了之后才会输出源代码位置和行号;
-g: 定义全局的变量或修改全局变量; 即使是在函数中调用;
-I: 继承外部同名函数属性(nameref属性除外); 如果没有同名, 本地变量;
下面的属性是限制输出变量类型或添加变量属性; 即限制属性或添加属性;
-a: 数组类型变量;
-A: map类型变量;
-f: 函数类型;
-i: 可以被当成整形的变量;即由数字组成的变量; 定义则表达式被当成算数表达式解析;
-l: 值都被转成小写; 不用于属性;
-n: nameref属性; 类似C++ &,别名; declare -n dd=PATH, PATHdd同名, PATHdd变, 反之亦然; 不用于数组类型;
-r: 变量只读; 不允许被修改或unset;
-t: trace属性; 函数则会继承DEBUG,RETURNtrap; 普通变量无意义;
-u: 值都被转成大写; 不用于属性;
-x: 定义export变量, 作用域为后续执行的指令;
-+optioin: +关闭; -打开; +a +A无用, 不会改变数组和map类型; +r也不会删除只读属性;
declare声明的变量默认local, -g则是global; name=value则是变量赋值,定义;
-a -A或表达式生成的数组,map类型在定义的时候属性不会体现; 比如-r; 只有后续复制修改的时候才会体现; -r属性会在赋值修改的时候触发, 而不是定义;
返回值: 非法选项; -f foo=bar错误定义; 修改只读变量; 错误操作数组; name命名非法; 关闭只读属性; 关闭数组属性; -f输出不存在函数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值