返回顶部
首页 > 资讯 > 操作系统 >详解shell 变量
  • 440
分享到

详解shell 变量

shell变量 2022-06-04 23:06:10 440人浏览 八月长安
摘要

1.简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,shell变量也遵循这个规则。 在Bash shell 中,每一个变量的值都是字符串,无

1.简介

变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,shell变量也遵循这个规则。

在Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。如C/C++ ,变量分为整数、浮点数、字符串、布尔等多种类型。当然,如果有必要,你也可以使用declare/typeset Shell内建命令显式定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在编写代码时自行注意值的类型即可。

2.变量类型

Shell中按照变量的作用域和生命周期,Shell变量可分为四大类:

(1)永久环境变量:需要修改配置文件,变量永久生效。

(2)临时环境变量:使用export命令行声明即可,变量在Shell脚本进程结束后仍然有效,但在关闭当前Shell会话后失效。

(3)全局变量:在脚本中定义,仅在当前Shell脚本中有效,其他Shell脚本进程不能访问,其作用域从定义的位置开始,到脚本结束或被显示删除的地方为止。注意,全局变量既可以在Shell函数内定义,也可以在Shell函数外定义,因为Shell函数内定义的变量默认为global,且作用域从“函数被调用时执行变量定义的地方”开始,到脚本结束或被显示删除的地方为止。


#!/bin/bash

globalVar=dablelv	#全局变量

(4)局部变量。在Shell脚本中函数内显示使用local关键字定义的变量。其作用域局限于函数内。同名local变量会屏蔽global变量。


#!/bin/bash

function test()
{
	local localVar=dablelv	#局部变量
}
test
echo $localVar			 	#输出为空

3.定义变量

Shell 支持以下三种定义变量的方式:


var=value
var='value'
var="value"

var是变量名,value是赋给变量的值。如果value不包含任何空白符(例如空格、Tab等),那么可以不使用引号;如果value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。注意,赋值号的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。

Shell变量的命名规范和大部分编程语言都一样:
(1)变量名由数字、字母、下划线组成;
(2)必须以字母或者下划线开头;
(3)不能使用Shell里的关键字(通过help命令可以查看保留关键字)。

变量定义示例:


name='dablelv'
home="安徽"
age=28

4.访问变量

使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:


name="dablelv"
echo $name
echo ${name}

变量名外面的花括号{}是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:


skill="java"
ioNeQgaecho "I am Good at ${skill}Script"

如果不给skill变量加花括号,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号{ },这是个良好的编程习惯。

5.修改变量的值

已定义的变量,可以被重新赋值,如:


name='dablelv'
echo $name
name="billwong"

第二次对变量赋值时不能在变量名前加,只有在使用变量时才能加,只有在使用变量时才能加,只有在使用变量时才能加。

6.单引号和双引号的区别

定义变量时,变量的值可以由单引号包围,也可以由双引号包围,它们到底有什么区别呢?不妨以下面的代码为例来说明:


#!/bin/bash

name='dablelv'
str1='我的名字是${name}'
str2="我的名字是${name}"
echo $str1
echo $str2

运行结果:

我的名字是${name}
我的名字是dablelv

以单引号包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。

以双引号包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。

建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。

7.将命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:


variable=`command`
variable=$(command)

第一种方式把命令用反引号包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;第二种方式把命令用$()包围起来,区分更加明显,所以推荐使用这种方式。

例如将两个数值相加赋给某一变量。


var1=1
var2=2
varAdd1=`expr $var1 + $var2`
varAdd2=$(expr $var1 + $var2)

8.只读变量

使用readonly命令,或者使用declare -rtypeset -r可以将变量定义为只读变量,只读变量的值不能被改变。


name="dablelv"
readonly name

declare -r name="dablelv"

typeset -r name="dablelv"

9.删除变量

使用unset内置命令可以删除变量。语法:


unset variable_name

unset命令不能删除只读变量。变量被删除后不能再次使用。如


#!/bin/bash

name="dablelv"
unset name
echo $name

上面的脚本没有任何输出。

以上就是详解shell 变量的详细内容,更多关于shell 变量的资料请关注我们其它相关文章!

--结束END--

本文标题: 详解shell 变量

本文链接: https://lsjlt.com/news/21213.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解shell 变量
    1.简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell变量也遵循这个规则。 在Bash shell 中,每一个变量的值都是字符串,无...
    99+
    2022-06-04
    shell 变量
  • Shell PATH变量用法详解
    前面章节我们说过,程序脚本要想在 linux 中运行,需要使用绝对路径或相对路径指定这个脚本所在的位置。但是为什么系统命令都没有指定路径而是直接执行的?比如,ls 命令并没有输入"/bin/ls"来执行,而是直接执行"l...
    99+
    2022-06-04
    Shell PATH变量 Shell $PATH变量
  • Shell编程之特殊变量和扩展变量详解
    特殊变量 在Shell中的特殊变量主要分别两种位置参数变量、状态变量两种。 位置参数变量 Shell中的位置参数变量主要是指0、0、1、$#等,主要用于从命令行、函数或脚本执行等地方传递参数。详细说明如下所示: ...
    99+
    2022-06-04
    shell特殊变量 shell变量 shell定义变量
  • Linux bash Shell中的变量类型详解
    在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 ...
    99+
    2022-06-04
    变量 详解 类型
  • 详解shell 变量的高级用法示例
    变量删除和替换 案例:从头开始匹配,将符合最短的数据删除 (#) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${vari...
    99+
    2022-06-04
    shell 变量
  • Shell编程之变量的高级用法详解
    变量替换 语法 说明 ${变量名#匹配规则} 从变量开...
    99+
    2022-06-04
    Shell 变量
  • 如何理解Shell编程中Shell变量
    这篇文章主要介绍“如何理解Shell编程中Shell变量”,在日常操作中,相信很多人在如何理解Shell编程中Shell变量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Shell编程中Shell变量...
    99+
    2023-06-09
  • Python中可变变量与不可变变量详解
    目录一 、常见的变量分类1、变量的创建二、变量分类1、、常见的不可变变量2、常见的可变变量三、拷贝的差别四、参数传递的差别前言: C++不同于Python的显著特点,就是有指针和引用...
    99+
    2024-04-02
  • Python变量教程私有变量详解
    目录前言重整及其工作原理_单前导下划线__双前导下划线双前导和双尾下划线前言 Python 中,不存在只能在对象内部访问的“私有”实例变量。然而,大多数 Py...
    99+
    2024-04-02
  • 详解python的变量
    目录1.Python 变量的概述:2.Python 变量的命名3.Python 变量赋值3.1 Python 变量赋值概述3.2 Python 变量的基本赋值格式3.3 Python...
    99+
    2024-04-02
  • Shell特殊变量(Shell $#、$*、$@、$?、$$)的使用
    上节我们讲到了 $n,它是特殊变量的一种,用来接收位置参数。本节我们继续讲解剩下的几个特殊变量,它们分别是:$#、$*、$@、$?、$$。 Shell 特殊变量及其含义 变量 ...
    99+
    2022-06-04
    Shell特殊变量 Shell $# $* $@ $? $$
  • MySql变量用法详解
    自我介绍 我是IT果果日记 一个普通的技术宅,定期分享技术文章,欢迎点赞、关注和转发,请多关照。 MySql变量主要分为系统变量、用户变量和局部变量,它们的区别是什么?分别有什么作用呢? 下面会一一给大家讲解一下,并结合...
    99+
    2023-09-10
    mysql sql Powered by 金山文档
  • 详解python中的变量
    目录变量变量的分类:赋值变量的命名规则:总结变量变量的分类:赋值变量的命名规则:总结变量 一个由程序员或用户定义的量且在程序中可能发生改变的量 #变量是所有程序的起点 变量的分类: ...
    99+
    2024-04-02
  • 如何理解Shell编程中的特殊变量之位置变量
    本篇内容介绍了“如何理解Shell编程中的特殊变量之位置变量”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!$0 获得当前脚本的文件名,包括路...
    99+
    2023-06-09
  • Shell eval怎么用变量获取环境变量
    这篇文章主要讲解了“Shell eval怎么用变量获取环境变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell eval怎么用变量获取环境变量”吧!场景系统中存在环境变量 USER=...
    99+
    2023-06-09
  • 详解Rust中的变量与常量
    目录变量与可变性常量变量隐藏属性Rust 是一种低级静态类型多范式编程语言,专注于安全性和性能,解决了 C/C++ 长期以来一直在努力解决的问题,例如内存错误和构建并发程序。它具有以...
    99+
    2022-11-13
    Rust变量与常量 Rust变量
  • Python变量命名规则和定义变量详解
    目录一、定义变量二、定义变量的规则总结 一、定义变量 语法规则: 变量名 = 值 定义变量的语法规则中间的‘=',并不是数学中等于号的意思,在编程语言中而是赋值的意思。赋值:其...
    99+
    2024-04-02
  • shell变量声明的判断以及字符串的操作详解
    这篇文章主要讲解了“shell变量声明的判断以及字符串的操作详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“shell变量声明的判断以及字符串的操作详解”吧!1、shell变量声明的判断 ...
    99+
    2023-06-09
  • Shell编程之Shell变量学习总结
    一、变量操作 A.变量显示、打印语法:echo $varB.变量设置语法:var=value 变量的设置规则:1.变量两端不能直接接空格符2.变量名称只能是因为字母与数字,但开头不能使数字3.双引号内的特殊...
    99+
    2022-06-04
    变量 Shell
  • Shell特殊变量Shell $#、$*、$@、$?、$$用法是什么
    这篇文章主要介绍“Shell特殊变量Shell $#、$*、$@、$、$用法是什么”,在日常操作中,相信很多人在Shell特殊变量Shell $#、$*、$@、$、$用法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作