bash变量里包含变量_在Bash中使用变量

bash变量里包含变量

在计算机科学(和休闲计算)中,变量是内存中的位置,用于保存任意信息以供以后使用。 换句话说,这是一个临时存储容器,供您将数据放入和取出数据。 在Bash shell中,该数据可以是单词(以计算机术语为单位的字符串 )或数字( 整数 )。

您可能以前从未(知道)在计算机上使用过变量,但是您可能在生活的其他领域使用过变量。 当您说“给我那个”或“看看这个”之类的内容时,您使用的是语法变量(您将它们视为代词 ),因为“ this”和“ that”的含义取决于您所描绘的内容在您的脑海中,或者您指的是什么,以便您的听众知道您指的是什么。 在进行数学运算时,即使您可能不将其称为变量,也可以使用变量来代表未知值。

这是Bash变量的快速简单演示,您可能没有意识到自己每天都在使用。 PS1变量包含有关您希望终端提示如何显示的信息。 例如,可以通过重新定义PS1变量将其设置为非常简单的值(例如百分号( )):


   
   
$ PS1 = "% "
%

本文介绍了在Linux,BSD,Mac或Cygwin上运行的Bash Shell中的变量。 Microsoft开源PowerShell的用户应参阅我的文章PowerShell中的自变量

什么是变量?

在Bash中是否需要变量取决于您在终端中执行的操作。 对于某些用户而言,变量是管理数据的基本手段,而对于另一些用户来说,它们只是次要和暂时的便利,而对于另一些用户而言,它们也可能不存在。

最终,变量是一种工具。 您可以在发现它们的用途时使用它们,也可以放心地知道它们是由您的操作系统管理的。 但是,知识就是力量,而了解变量在Bash中的工作方式可以使您获得各种意想不到的创造性问题解决方案。

如何设置变量

您不需要特殊的权限即可创建变量。 它们是免费创建,免费使用且通常无害的。 在Bash shell(在Linux和Mac上)中,可以通过定义变量名,然后设置其值来设置它们。 以下示例创建一个名为FOO的新变量,并将其值设置为字符串/ home / seth / Documents

 $  declare FOO = "/home/seth/Documents" 

成功是无言的沉默,因此您可能不确定变量是否已设置。 您可以使用echo命令自己查看结果,通过在变量前面加上一个美元符号( $ )来调用该变量。 为了确保完全按照定义定义读取变量,还可以将其用大括号和引号引起来。 这样做会保留可能出现在变量中的所有特殊字符。 在此示例中,这并不适用,但仍然是形成以下习惯:


   
   
$ echo " ${FOO} "
/ home / seth / Documents

对于经常使用shell的人来说,设置变量可能是常见的事情,因此该过程变得有些非正式。 当一个字符串后跟一个等号( = )和一个值时,Bash会悄悄地假定您正在设置变量,从而使clarify关键字变得不必要:

 $  FOO = "/home/seth/Documents" 

变量通常用于将信息从一个系统传递到另一个系统。 在这个简单的示例中,您的变量不是很有用,但是它仍然可以传达信息。 例如,由于FOO变量的内容是文件路径 ,因此可以将变量用作〜/ Documents目录的快捷方式:


   
   
$ pwd
/ home / seth
$ cd " ${FOO} "
$ pwd
/ home / seth / Documents

变量可以是任何非保留的字符串(以及整数和下划线)。 它们不一定要大写,但是它们通常都是大写的,因此易于识别为变量。

如何清除变量

您可以使用unset命令清除变量:


   
   
$ unset FOO
$ echo $FOO

实际上,通常不需要采取此操作。 变量相对“便宜”,因此您可以创建它们,然后在不再需要它们时将其忘记。 但是,有时可能要确保变量为空,以避免将错误的信息传递给可能读取该变量的另一个进程。

创建具有碰撞保护功能的新变量

有时,您可能有理由相信您或过程已设置了变量。 如果您不想覆盖它,则可以使用一种特殊的语法将变量设置为其现有值,除非其现有值为空。

对于此示例,假定FOO设置为/ home / seth / Documents


   
   
$ FOO = ${FOO:-"bar"}
$ echo $FOO
/ home / seth / Documents

冒号:-表示导致声明默认为现有值。 要以其他方式查看此过程,请清除变量,然后重试:


   
   
$ unset FOO
$ echo $FOO

$ FOO = ${FOO:-"bar"}
$ echo $FOO
bar

将变量传递给子进程

创建变量时,您正在创建所谓的局部变量 。 这意味着该变量对于您当前的shell来说是已知的,而只有您当前的shell知道。

此设置是对变量范围的有意限制。 根据设计,变量倾向于默认为仅本地可用,以使信息在需要知道的基础上保持共享。 例如,如果您愚蠢地创建了一个包含重要密码的明文变量,那么很高兴得知您的系统不允许远程shell或流氓守护进程(或在创建该变量的一个会话之外的任何其他程序)访问该密码。 。

使用本文开头的示例更改您的提示,然后在当前窗口中启动一个新的shell:


   
   
$ PS1 = "% "
% bash
$

当启动新的Shell时, PS1的新值是默认提示,而不是新提示:子进程不会继承其父进程中设置的变量。 如果终止子进程,则返回到父外壳,然后再次看到自定义PS1提示符:


   
   
$ exit
%

如果你想给一个变量传递给子进程,你可以在前面加上一个命令变量的定义,也可以将变量导出到子进程。

前置变量

您可以在运行命令之前添加任意数量的变量。 子进程是否使用变量取决于该进程,但是无论如何,您都可以将变量传递给它:


   
   
$ FOO = 123 bash
$ echo $FOO
123
$

当您在运行某些库需要特殊位置的应用程序时(使用LD_LIBRARY_PATH变量),或者在使用非标准编译器编译软件时(使用CC变量),等等,前置是一个有用的技巧。 。

导出变量

使变量可用于子进程的另一种方法是export关键字,这是Bash内置的命令。 export命令扩展了您指定的任何一个或多个变量的范围:


   
   
$ PS1 = "% "
$ FOO = 123
$ export PS1
$ export FOO
% bash
% echo $PS1
%
% echo $FOO
123

在这两种情况下,不仅仅是子shell有权访问已传递给它或导出的局部变量,它还是该shell的任何子进程。 您可以从同一外壳启动应用程序,并且该变量可以在应用程序中作为环境变量使用。

导出供系统上所有内容使用的变量称为环境变量 ,这是以后文章的主题。 同时,尝试对日常任务使用一些变量,以查看它们为您的工作流带来了什么。

翻译自: https://opensource.com/article/19/8/using-variables-bash

bash变量里包含变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值