当前位置: 首页 > news >正文

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

查看所有函数

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输出不存在函数;

相关文章:

  • html+css设计两个摆动的大灯笼
  • 音视频知识介绍(二)
  • github上传代码(亲测实用)
  • Vue 中 CSS scoped 的原理
  • MySQL 数据库练习题记录01
  • 142.环形链表II
  • java短网址平台
  • 【论文阅读】《知识图谱研究综述》;Knowledge Graph:概念及主要应用,主要特征、构建的主要技术、未来研究方向。
  • 通过Django发送邮件
  • 【数组】leetcode27.移除元素(C/C++/Java/Js)
  • Java命令行程序实战:javac编译,jar命令,jar包
  • 七种分布式系统的解决方案,一次性讲给你听!
  • 最长公共子序列
  • 异步通信技术AJAX | 基于JSON、XML的数据交换
  • 实战:一个脚本实现统计linux进程相关的信息
  • 免费开源的箱包制造行业ERP管理系统介绍
  • 【SpringBoot+Redis】实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)
  • 跟着pink老师学JS的第三天总结
  • 嵌入式:ARM 汇编控制伪操作
  • 写给Java程序员的GRPC入门系列(3)
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 当农民跨进流动的世界|劳动者的书信①
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪
  • 马上评丨市长信箱“已读乱回”,群众在意的是什么