我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)...

我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)

本文链接:http://codingstandards.iteye.com/blog/1150109   (转载请注明出处)

 

用途说明

declare命令是bash的一个内建命令,它可以用来声明shell变量,设置变量的属性(Declare variables and/or give them attributes)。该命令也可以写作typeset。虽然人们很少使用这个命令,如果知道了它的一些用法,就会发现这个命令还是挺有用的。

 

常用参数

格式:declare

格式:typeset

格式:declare -p

格式:typeset -p

显示所有变量的值。

 

格式:declare -p var

格式:typeset -p var

显示指定变量var的值。

 

格式:declare var=value

格式:typeset var=value

格式:var=value

声明变量并赋值。

 

格式:declare -i var

格式:typeset -i var

将变量var定义成整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0。

 

格式:declare -r var

格式:typeset -r var

格式:readonly var

将变量var声明为只读变量。只读变量不允许修改,也不允许删除。

 

格式:declare -a var

格式:typeset -a var

将变量var声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给"[0]"相同。

 

格式:declare -f

格式:typeset -f

显示所有自定义函数,包括名称和函数体。

 

格式:declare -F

格式:typeset -F

显示所有自定义函数名称。

 

格式:declare -f func

格式:typeset -f func

只显示指定函数func的函数定义。

 

格式:declare -x var

格式:typeset -x var

格式:export var

将变量var设置成环境变量,这样在随后的脚本和程序中可以使用。

 

格式:declare -x var=value

格式:typeset -x var=value

格式:export var=value

将变量var设置陈环境变量,并赋值为value。

 

使用示例

示例一 declare是内建命令

[root@web ~]# type -a declare
declare is a shell builtin
[root@web ~]#

[root@jfht ~]# type -a typeset
typeset is a shell builtin
[root@jfht ~]#

 

示例二 declare -i之后可以直接对表达式求值

[root@web ~]# x=6/3
[root@web ~]# echo $x
6/3
[root@web ~]# declare -i x
[root@web ~]# echo $x    
6/3
[root@web ~]# x=6/3
[root@web ~]# echo $x
2

如果变量被声明成整数,可以把表达式直接赋值给它,bash会对它求值。

[root@jfht ~]# x=error
[root@jfht ~]# echo $x
0

如果变量被声明成整数,把一个结果不是整数的表达式赋值给它时,就会变成0.

[root@jfht ~]# x=3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")
如果变量被声明成整数,把一个小数(浮点数)赋值给它时,也是不行的。因为bash并不内置对浮点数的支持。
[root@web ~]#

[root@jfht ~]# declare +i x

此命令的结果是取消变量x的整数类型属性。
[root@jfht ~]# x=6/3
[root@jfht ~]# echo $x
6/3

因为变量x不是整型变量,所以不会自动对表达式求值。可以采用下面两个方式。

[root@jfht ~]# x=$[6/3]
[root@jfht ~]# echo $x
2
[root@jfht ~]# x=$((6/3))
[root@jfht ~]# echo $x  
2
[root@jfht ~]#

 

示例三 声明只读变量

[root@jfht ~]# declare -r r
[root@jfht ~]# echo $r

[root@jfht ~]# r=xxx
-bash: r: readonly variable
[root@jfht ~]# declare -r r=xxx
-bash: declare: r: readonly variable
[root@jfht ~]# declare +r r   
-bash: declare: r: readonly variable
[root@jfht ~]#
[root@jfht ~]# declare +r r
-bash: declare: r: readonly variable
[root@jfht ~]#
[root@jfht ~]# unset r
-bash: unset: r: cannot unset: readonly variable
[root@jfht ~]#

 

示例四 声明数组变量(实际上,任何变量都可以当做数组来操作)

[root@jfht ~]# declare -a names
[root@jfht ~]# names=Jack
[root@jfht ~]# echo ${names[0]}
Jack
[root@jfht ~]# names[1]=Bone
[root@jfht ~]# echo ${names[1]}
Bone
[root@jfht ~]# echo ${names}
Jack
[root@jfht ~]# echo ${names[*]}
Jack Bone
[root@jfht ~]# echo ${#names}
4

直接引用names,相当于引用names[0]
[root@jfht ~]# echo ${#names[*]}
2

[root@jfht ~]# echo ${names[@]}
Jack Bone
[root@jfht ~]# echo ${#names[@]}
2

[root@jfht ~]# declare -p names   
declare -a names='([0]="Jack" [1]="Bone")'
[root@jfht ~]#

 

示例五 显示函数定义

[root@jfht ~]# declare -F
declare -f add_jar
declare -f add_jar2
declare -f add_jar3
[root@jfht ~]# declare -f
add_jar ()
{
    [ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
add_jar2 ()
{
    if [ -e $1 ]; then
        CLASSPATH=$CLASSPATH:$1;
    else
        if [ -e $2 ]; then
            CLASSPATH=$CLASSPATH:$2;
        fi;
    fi
}
add_jar3 ()
{
    if [ -e $1 ]; then
        CLASSPATH=$CLASSPATH:$1;
    else
        if [ -e $2 ]; then
            CLASSPATH=$CLASSPATH:$2;
        else
            if [ -e $3 ]; then
                CLASSPATH=$CLASSPATH:$3;
            fi;
        fi;
    fi
}
[root@jfht ~]# declare -f add_jar
add_jar ()
{
    [ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
[root@jfht ~]# declare -F add_jar
add_jar
[root@jfht ~]# declare -F add_
[root@jfht ~]# declare -F add_*
[root@jfht ~]# declare -F 'add_*'
[root@jfht ~]#

 

问题思考

相关资料

【1】Aric小屋 linux bash shell之declare
http://www.cnblogs.com/fhefh/archive/2011/04/22/2024857.html
【2】译言网 Bash中的declare语句
http://article.yeeyan.org/view/20180/38866
【3】Advanced Bash-Scripting Guide:  9.2. Typing variables: declare or typeset
http://tldp.org/LDP/abs/html/declareref.html
【4】Advanced Bash-Scripting Guide:  Chapter 27. Arrays
http://tldp.org/LDP/abs/html/arrays.html#ARRAYREF
【5】php_boy的专栏 bash (4) declare getopts noclobber
http://blog.youkuaiyun.com/php_boy/article/details/6416740

 

 

返回 我使用过的Linux命令系列总目录

 

11.declare 命令详解及5种类型用法示例 如果我们需要进行数值运算,可以采用以下三种方法中的任意一种:使用declare声明变量类型:既然所有变量的默认类型是字符串型,那么只要我们把变 量声明为整数型就可以进行运算了。使用declare命令就可以实现声明变量的类型。我们可以用declare命令把变量声明为环境变量,和export命令的作用是一样的。变量和数组都是用来保存数据的,只是变量只能赋予一个数据值,一旦重复赋值,后一个值就会覆盖前一个值。而数组可以赋予一组相同类型的数据值。 阅读详情

相关推荐

Shell脚本编程基础与实践指南

Shell脚本作为Linux/Unix系统中的核心自动化工具,通过解释执行文本命令实现系统管理自动化。其工作原理基于Shell解释器逐行解析命令,特别适合文件操作、批量任务处理等场景。在DevOps和系统运维领域,Shell脚本与Bash、VSCode等工具链结合,能高效完成日志分析、服务监控等日常运维工作。本文从变量定义、流程控制等基础语法切入,深入讲解如何利用重定向、函数封装等特性构建健壮的自动化脚本,并分享实际案例中权限管理、性能优化等工程实践技巧。

715

【linux命令讲解大全】195.Bash 命令解析:declare 的用法和功能详解

本文详细介绍了 Bash 命令 declare 的语法、用途和常见选项,以及相关的参数、返回值和异常情况。通过示例和讨论,解释了全局变量和局部变量的概念,并提供了最佳实践建议。此外,还对数组和关联数组的定义和使用进行了说明。文章还针对不同情况下声明变量的方法进行了比较,强调了每种方法的优势和适用场景。最后,对于导出属性和只读属性,以及与其他命令(如export、readonly和unset)的关系也进行了解释。通过阅读本文,读者可以全面了解 declare 命令的使用方法和功能,为编写更高效的 Bash 脚

全栈若城,专注知识分享 7855

shell之declare用法

shell高阶使用

木简熙的博客 387

Bash内置命令——declare

declare declare [-aAfFgilnrtux] [-p] [name[=value] …] 声明变量并为其赋予属性。 $ declare foo=bar abc=123 $ echo ${foo} ${abc} bar 123 如果没有给name,则显示所有变量。 $ declare BASH=/bin/bash BASHOPTS=checkwinsize:cmdhis...

zjysource的专栏 2153

【Linux命令大全】005.系统设置之declare命令(实操篇)

本文全面介绍了Linux系统中declare命令的功能与高级用法。作为Bash shell内置的强大工具,declare用于声明和设置变量属性,包括整数类型(-i)、只读属性(-r)、数组类型(-a/-A)、环境变量(-x)以及大小写转换(-l/-u)等特性。文章通过丰富的代码示例详细展示了各种参数的使用场景,如声明整数变量进行数学运算、创建只读常量、定义数组和关联数组、导出环境变量等。此外,还介绍了批量修改变量属性和取消属性等高级技巧,是系统管理员和Shell脚本开发者提升效率的实用指南。

yuhuasheng1997的博客 556

RabbitMq安装

本文详细介绍了在CentOS7系统上离线部署RabbitMQ4.3.2的完整流程。主要内容包括:1)准备RabbitMQ安装包、Erlang依赖和socat网络工具;2)安装系统编译依赖并编译安装Erlang;3)部署RabbitMQ服务,配置环境变量和socat依赖;4)启用Web管理插件并创建管理员账号;5)配置防火墙放行端口;6)设置Systemd开机自启服务;7)提供常用运维命令。文档特别强调离线部署注意事项,包括socat依赖、版本兼容性、账号安全及主机名配置等问题,为生产环境部署提供完整解决方案

sinat_25821779的博客 323

Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)...

本文链接:http://codingstandards.iteye.com/blog/1150109 (转载请注明出处)用途说明declare命令是bash的一个内建命令,它可以用来声明shell变量,设置变量的属性(Declare variables and/or give them attributes)。该命令也可以写作typeset。虽然人们很少使用这个命令,如果...

weixin_33750452的博客 103

保姆级教程:中科蓝讯Downloader配置详解,从软硬开关机到EQ调音一步到位

本文详细介绍了中科蓝讯Downloader的配置流程,从硬件初始化到音频调优的全方位指南。涵盖软硬开关机选择、电源管理、DAC校准、EQ调音等关键步骤,帮助开发者高效完成配置并避免常见问题。特别适合需要精确控制音频设备和电源管理的中科蓝讯芯片开发者。

weixin_33670786的博客 308

【Shell 命令集合 系统设置 内建命令】⭐Linux 声明变量的属性和类型 declare命令 使用指南

declare命令是Linux中的一个内建命令,用于声明变量的属性和类型。它可以用于定义变量的作用域、设置变量的类型、设置变量的属性以及为变量赋值。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2354

基于ESP32的摩托车蓝牙对讲系统开发实践

蓝牙音频传输技术在现代通信中扮演着重要角色,其核心原理是通过无线射频实现数字音频信号的双向传输。在工程实践中,蓝牙HFP协议常用于语音通信场景,而ESP32等嵌入式平台因其低成本和高集成度成为DIY项目的理想选择。本项目通过ESP32-WROOM-32D开发板结合PCM5102 DAC和INMP441数字麦克风等模块,构建了一套摩托车骑行专用的蓝牙对讲系统。该系统特别针对高速移动环境下的风噪抑制和连接稳定性进行了优化,采用数字信号处理技术实现实时降噪,并通过I2S接口确保音频质量。这种方案不仅成本控制在30

weixin_33239721的博客 414

Polyworks宏脚本开发入门:5分钟搞定环境搭建与基础命令录制

本文详细介绍了Polyworks宏脚本开发的入门指南,包括环境搭建、基础命令录制和核心对象操作。通过5分钟快速启动开发模式,掌握自动化操作流程和脚本调试技巧,帮助工程师高效完成工业测量与三维检测任务。

weixin_29306875的博客 533

shell脚本的创建和执行及变量的使用

只包含字母(大小写敏感)、数字和下划线 _。不能以数字开头。避免使用 Shell 关键字。使用大写字母表示常量(习惯上)。避免使用特殊符号和空格。赋值:your_name="cyber security" # 给变量赋值,无 $ 符号打印输出变量:echo $your_name # 打印输出变量,带 $ 符号。

Mssqj的博客 1390

STM32硬件SPI驱动ADS1255/1256避坑指南:从Cube MX配置到稳定采样实战

本文详细解析了使用STM32硬件SPI驱动高精度ADC芯片ADS1255/1256的完整流程与关键陷阱。重点阐述了Cube MX中SPI模式(必须为CPOL=1, CPHA=1)、数据帧格式(MSB First)及波特率(建议从256kHz起)的正确配置,并提供了分步读写时序的代码实现与逻辑分析仪调试方法,帮助开发者避开常见坑点,实现稳定可靠的高精度数据采样。

weixin_29193259的博客 358

The “declare” Command in Linux [7 Practical Examples]

A variable is a standby where you assign some value for later use for your code. The declare command in Linux bash scripts is used to declare shell variables and functions. It sets their attributes and displays their values. In this article, I’ll discuss h

allway2的博客 937

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 90

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目,为远程直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和部署。

嵌入式技术开发 3896

declare和less

当运行 `less` 命令时,`LESSOPEN` 会将文件名传递给 `/usr/bin/lesspipe`,`lesspipe` 会根据文件类型对文件内容进行预处理,然后将处理后的结果传递给 `less`。当 `less` 命令结束时,`LESSCLOSE` 会调用 `/usr/bin/lesspipe`,并传递当前文件名和临时文件名。- **`LESSOPEN`**:在打开文件时,通过 `/usr/bin/lesspipe` 对文件内容进行预处理,以便 `less` 能够正确显示文件内容。

NLstudy33的博客 865

基于Blender软件对Matterport3D数据集场景可视化

使用Blender软件对 Matterport3D 中的室内场景进行可视化。

qq_44100524的博客 289

【转载】我使用过的Linux命令之declare

我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令) 本文链接:http://codingstandards.iteye.com/blog/1150109   (转载请注明出处)   用途说明 declare命令是bash的一个内建命令,它可以用来声明shell变量,设置变量的属性(Declare variables an

BLOCKGOLD.E的博客 301

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux的Bash——(二)Shell的变量

Linux的Bash——(二)Shell的变量

weixin_47147732的博客 644

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux高阶—shell脚本编程基础(六)

​目录 一、学习Shell脚本编程前,先学习脚本三个变量:系统变量、用户变量、环境变量。 二、特殊字符: 三、声明变量: 四、if语句逻辑运算符: 五、for 语句循环: 六、while语句循环: 一、学习Shell脚本编程前,先学习脚本三个变量:系统变量、用户变量、环境变量。 系统变量:系统变量通常写在/etc/profile或/etc/profile.d中,对所有用户生效,常用变量举例: 1、$?:表示脚本执行的状态,0表示正常,其他表示错误 2、$$:表示进程的id;Shell..

亓荼的博客 1524

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

linux shell 数组运算,Linux Shell编程(3) - Shell 运算

一、declare 命令shell 变量是弱类型,且默认都是字符串型declare 命令可以给变量设定或取消类型1. 语法declare [-/+][选项] [变量名]2. 选项-:给变量设定类型属性+:取消变量的类型属性-a:将变量声明为数组类型(array)-i:将变量声明为整数类型(integer)-x:将变量声明为环境变量-r:将变量声明为证只读变量-p:显示指定变量的被声明的类型3. 把...

weixin_33228847的博客 333

linux从a自增10_Shell中实现整数自增的几种方法示例

前言我们日常使用的Shell脚本中,在用于while或for循环中经常要涉及到整数自增的情况,其实实现自增的方法有很多,下面罗列下可能的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:【方式一】declare -i来声明整数变量root@localhost:~# declare -i x=1root@localhost:~# x+=1root@localhost:~# echo...

weixin_39725594的博客 292

linux中set、unset、export、env、declare,readonly的区别以及用法

     set命令显示当前shell的变量,包括当前用户的变量;   env命令显示当前用户的变量;   export命令显示当前导出成用户变量的shell变量。 每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量, ...

weixin_30780649的博客 305

Unix_Linux_AIX_常用命令总结

■前言 Unix,Linux 介绍 https://blog.csdn.net/sxzlc/article/details/103652857(介绍内容在文章底部) ■各种命令 0.cd 目录跳转 1.uname uanme -a 显示服务器全部信息 uname -n 显示服务器名字 2.ifconfig ifconfig -a 查看网络配置 3.who 显示当前在线用户 4.chown ch...............

sun0322 4万+

shell编程---变量的定义

为了更好地控制变量的相关属性,bash 提供了一个 名称为declare的命令来声明变量,该命令的基本语法如下: declare attribute variable 其中,attribute表示变量的属性,常用的属性有如下所述。  -p:显示所有变量的值。  -i:将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果 求值失败或者不是整数,就设置为0。  -r

zhuzhuxia 545
上一篇: 我使用过的Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
下一篇: 在Linux下找出多个文件中最新的那个文件
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值