当前位置: 首页 > 编程笔记 >

Shell中变量作用域的介绍与使用命令

金令
2023-03-14
本文向大家介绍Shell中变量作用域的介绍与使用命令,包括了Shell中变量作用域的介绍与使用命令的使用技巧和注意事项,需要的朋友参考一下

前言

众所周知Shell 中的变量只作用于当前进程。如需在子进程中创建副本可使用 export 内建命令。 有时使用临时变量语法可以非常方便。

变量使用

  • 任何地方都可以定义 Shell 变量,使用 = 分隔变量名和变量值。= 前后不可出现空格,但变量的值可以留空。
  • 读取变量需要添加$前缀。
  • 变量作用域为当前进程。

例如:

url=http://harttle.com
echo $url

export 到子进程

通常变量是不需要 export 的,但是当你需要把一个工作分割成若个小的任务, 分别用一个脚本来实现的时候,就需要把变量名传递给它们。 比如有一个 spider.sh 来获下载任意 URL 到临时目录:

#!/usr/bin/env bash
curl $url > $TMPDIR/$RANDOM.html

我们需要将当前脚本中的 url 传递给spider.sh:

export url=http://harttle.com
bash ./spider.sh
# 等价于(如果该文件有可执行权限的话)
./spider.sh

值得注意的是export只会在子进程中创建变量的副本,即spider.sh对它的改动不会体现在当前进程。

在当前进程执行脚本

使用 source 或 . 内建命令可以在当前进程执行另一个脚本,因此当前上下文的变量对该脚本是可见的。

url=http://harttle.com

source ./spider.sh
# 等价于
. ./spider.sh

临时设置环境变量

根据 Shell 语法,在一个简单命令前可以包含任意个赋值语句。这些变量赋值将会在执行命令前展开,等效于临时的环境变量。

A “simple command” is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator. – Simple Commands, Shell Commands

例如下面命令可以把url变量传递给spider.sh:

url=http://harttle.com bash ./spider.sh

这是一条 简单命令,下面的多条命令或 组合命令:

url=http://harttle.com; bash ./spider.sh   # 两条命令,只作用于当前进程
url=http://harttle.com && bash ./spider.sh  # 组合命令,只作用于当前进程
export url=http://harttle.com; bash ./spider.sh # 两条命令,作用于父子进程

简单命令中的变量赋值也不作用于当前进程。例如下面的代码将会输出空行:

url=http://harttle.com echo $url

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍Javascript中作用域的详细介绍,包括了Javascript中作用域的详细介绍的使用技巧和注意事项,需要的朋友参考一下 1、编译原理 在传统编译语言的流程中,程序中的一段代码执行前会经历三个步骤。统称为“编译”。 词法分析   将代码字符串分解成有意义的代码块,这些代码块称为词法单元。例如:在js中,var a = 2;。这段程序通常被拆分为以下词法单元。var、a、2、;。至

  • 本文向大家介绍Shell编程中的特殊变量之位置变量介绍,包括了Shell编程中的特殊变量之位置变量介绍的使用技巧和注意事项,需要的朋友参考一下 1、$0 获得当前脚本的文件名,包括路径。 2、$n 获取当前执行脚本的第n个参数,n=1..9,$0,为当前脚本名。如果n大于9,使用${10} 3、$* 获取脚本所有参数 4、$# 获得脚本所有参数的个数

  • 本文向大家介绍浅谈shell循环中变量的作用域问题,包括了浅谈shell循环中变量的作用域问题的使用技巧和注意事项,需要的朋友参考一下 最近实现了一个shell脚本,功能简单来说就是从文件中按行读取然后将所有行拼接成一行写入一个文件,关键代码如下 结果执行结果竟然是空!按照常理shell中的变量默认是全局变量,不会存在变量作用域的问题,于是上网查了下,发现问题出在while上 while循环读取文

  • 变量作用域 变量的作用域值的是变量的生命周期和作用范围(全局与局部作用域的区别)。 作用域介绍 静态作用域 静态作用域有称为词法作用域,即指其在编译的阶段就可以决定变量的引用。静态作用域只更变量定义的位置有关与代码执行的顺序无关。 var x = 0; function foo() { alert(x); } function bar() { var x = 20; foo(); }

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量无法访问。 有三个地方,其中变量可以用Pascal编程语言声明 - 在子程序或块中,称为局部变量 在所有子程序之外,称为全局变量 在子程序参数的定义中称为形式参数 让我们解释什么是local和global变量和形式参数。 局部变量 (Local Variables) 在子程序或块内声明的变量称为局部变量。 它们只能由子程序或

  • 如果你之前用过像Python或者Ruby之类的动态语言,现在你可能已经熟悉了Vim脚本的变量。你会发现Vim变量的大部分内容跟你想的一样,不过有一个东西可能会不同,那就是变量的作用域。 在两个分隔的窗口中分别打开两个不同的文件,然后在其中一个窗口中执行下面的命令: :::vim :let b:hello = "world" :echo b:hello 如你所愿,Vim会显示world。现在切换到