Bash 变量教程——6 个实用的 Bash 全局和局部变量示例

举报
Tiamo_T 发表于 2022/02/09 16:08:33 2022/02/09
【摘要】 Bash 变量教程——6 个实用的 Bash 全局和局部变量示例

与任何其他编程语言一样,Bash 也提供变量。

Bash 变量为程序生命周期内需要的信息提供临时存储。

句法:

VARNAME=VALUE

注意:变量赋值中的“=”号周围不应有任何空格。当您使用 VAR=VALUE 时,shell 将“=”视为符号并将命令视为变量赋值。当您使用 VAR = VALUE 时,shell 假定 VAR 必须是命令的名称并尝试执行它。

Shell 不关心变量的类型。变量可以存储字符串、整数或实数。

Example.1 简单的 Bash 变量赋值用法

以下脚本创建了一个名为 LIST 的变量并分配了值“/var/opt/bin”。要访问变量,只需在变量名称前加上 $,这将为您提供存储在该变量中的值。

$ cat sample.sh
#!/bin/bash
LIST="/var/opt/bin/"
ls -l $LIST

执行上面的脚本,它将以长格式列出 /var/opt/bin,如下所示。

$ ./sample.sh
total 8
drwxrwsr-x 2 bin  bin 4096 Jan 29 06:43 softwares
drwxr-sr-x 5 root bin 4096 Sep  2  2009 llist

Bash 变量范围——本地和全局

在 Bash 中,变量不必声明。但是,当您访问迄今为止未使用的变量时,您不会收到任何警告或错误消息。相反,它将显示一个空白值。


示例 2. bash 变量中的空白值

$ cat var1.sh
#!/bin/sh
echo "Variable value is: $VAR1"
VAR1="TIAMO"
echo "Variable value is: $VAR1"

$ ./var1.sh
Variable value is:
Variable value is: TIAMO

如上图,最初变量会有一个空值,赋值后就可以得到你的值了。export 命令用于从交互式 shell 中导出变量。export 显示对变量范围的影响。

示例 3. 没有导出的 Bash 变量

在交互式 shell 中为变量赋值,并尝试在 shell 脚本中访问该变量。

$ VAR2=LINUX

$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

现在,执行上面的脚本,如下所示。

$ ./var2.sh
VAR2=
VAR2=UNIX

你仍然会得到变量 VAR2 的空白值。shell 将变量 VAR2 与 LINUX 一起存储在当前 shell 中。在执行 var2.sh 期间,它会生成 shell 并执行脚本。所以变量 VAR2 在生成的 shell 中不会有值。您需要导出变量以使其被另一个程序继承 - 包括一个 shell 脚本,如下所示。

示例 4. 导出 Bash 变量

$ export VAR2=LINUX

$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

现在执行上面的脚本。

$ ./var2.sh
VAR2=LINUX
VAR2=UNIX
$
$echo $VAR2
LINUX

现在,您可以注意到在执行 shell 脚本 var2.sh 后,VAR2 的值是 LINUX。因为变量不会被传递回您的交互式 shell,除非您在当前 shell 中执行脚本。

声明一个 Bash 变量

在 bash 中使用 declare 语句,我们可以限制分配给变量的值。它限制了变量的属性。声明语句中的选项用于确定变量的类型。

句法:

declare option variablename
  • 声明是一个关键字
  • 选项可能是:
    • -r 只读变量
    • -i 整数变量
    • - 一个数组变量
    • -f 函数
    • -x 通过环境声明并导出到后续命令。

示例 5. 使用 declare 声明 Bash 变量

$ cat declar.sh
#!/bin/bash
declare -i intvar
intvar=123 # Assigning integer value.
echo $intvar
intvar=12.3 #Trying to store string type value to an integer variable
echo $intvar

declare -r rovar=281
rovar=212 # Trying to change the readonly variable.

从下面的执行中,您可以在将无效数据分配给变量时注意到错误消息。

$ ./declar.sh
123
t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3")
123
t.sh: line 11: rovar: readonly variable

全局 Bash 变量

全局变量也称为环境变量,可用于所有 shell。printenv 命令用于显示所有环境变量。

$ printenv
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/1
HOME=/root
LOGNAME=root
CVS_RSH=ssh

本地 Bash 变量

局部变量仅在代码块内可见。local 是用于声明局部变量的关键字。在函数中,局部变量仅在该函数块内才有意义。

示例 6. 全局和局部 Bash 变量

$ cat localvar.sh
#!/bin/bash
pprint()
{
  local lvar="Local content"
  echo -e "Local variable value with in the function"
  echo $lvar
  gvar="Global content changed"
  echo -e "Global variable value with in the function"
  echo $gvar
}

gvar="Global content"
echo -e "Global variable value before calling function"
echo $gvar
echo -e "Local variable value before calling function"
echo $lvar
pprint
echo -e "Global variable value after calling function"
echo $gvar
echo -e "Local variable value after calling function"
echo $lvar

执行上面的脚本,

$ sh t.sh
Global variable value before calling function
Global content
Local variable value before calling function

Local variable value with in the function
Local content
Global variable value with in the function
Global content changed
Global variable value after calling function
Global content changed
Local variable value after calling function

在上面的输出中,局部变量在调用函数之前和之后只有空值。它的范围只在函数中。它从函数中消失了,而全局变量即使在函数执行后也具有更新的值。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。