理解和在 Shell 脚本中编写“Linux 变量” – 第 10 部分
Linux shell 脚本语言一直是一个热门话题,将来也依然如此。Shell 脚本语言非常神奇,用脚本语言编写程序就像用其他语言一样简单。但是,我们需要深入了解我们在做什么以及期望得到什么结果。
我们为读者撰写的所有 shell 脚本文章都广受好评,包括上一篇“深入了解 Linux 变量”。我们正在将上一篇文章扩展到一个新的水平。
变量属性
Linux 环境中的每个变量都有某些选项,这些选项称为“属性”。可以根据情况使用命令“declare”打开或关闭这些选项或属性。
变量属性的一个示例是使用开关“ -i ”,它将打开相应变量的整数属性。即使将非数字值传递给开关“ -i ”,它也不会抛出错误消息并输出“ 0 ”作为整数解释。从下面的例子中可以更清楚地看出。
声明一个变量 Integer, bill = 121
avi@localhost:~$ declare -i bill=121
打印变量bill的值。
avi@localhost:~$ printf "%d\n" "$bill" 121
让变量值为字符串。变量 bill 已声明,无需再次声明。只需将变量值更改为即可。
avi@localhost:~$ bill=example
现在,再次打印变量bill的值。
avi@localhost:~$ printf "%d\n" "$bill" 0
注意错误消息中的“ 0 ”。
现在的问题是,如何知道已经声明的变量的属性?
avi@localhost:~$ declare -p bill declare -i bill="121"
这里,-p(代表打印)开关可以解决问题。
再次,我该怎么做才能关闭变量的属性?
为了关闭变量的属性,我们需要做的就是在开关前面放置一个+(加号)。从下面的例子中可以更清楚地看出。
关闭上述变量的整数属性。
avi@localhost:~$ declare +i bill
检查变量的值。
avi@localhost:~$ printf "%d\n" "$bill" bash: printf: bill: invalid number 0
现在使用切换字符串打印变量的值。
avi@localhost:~$ printf "%s\n" "$bill" example
在上面的例子中,bash 无法将非数字值判断为错误,但是printf可以解释什么可以是数字,什么不能是数字。
只读变量
您可能听说过只读存储器(ROM),但什么是只读变量?它与 ROM 有相似之处吗?
只读变量就像只读内存一样,一旦赋值就无法更改。因此它被称为只读。您无法写入、编辑或修改该变量的新值。下面使用示例进行说明。
声明一个只读(-r)变量名,其值为“Example.com”。
avi@localhost:~$ declare -r name="Example.com"
打印上面声明的变量的值。
avi@localhost:~$ printf "%s\n" "$name" Example.com
尝试改变变量的值。
avi@localhost:~$ declare -r name="Avishek" bash: declare: name: readonly variable
如上所述,可以使用“ + ”符号更改只读变量的属性。
在 Linux 中导出变量
在脚本中声明的所有 shell 变量在脚本运行前都可用。脚本之外的变量不存在。使变量在脚本之外可用的过程称为导出变量。
可以使用开关“declare -x (export)”将变量导出到 shell 外部,该开关告知 shell 您想要导出的内容。可以使用“declare export”开关。
avi@localhost:~$ declare -x variable=”Constant_Value”
当变量被导出到脚本外部时,脚本运行时对变量所做的所有更改都将丢失。在 shell 脚本中,导出变量非常重要。
我们希望有一个只读且在脚本之外可用的变量,我们需要同时使用开关-r和开关-x 。
avi@localhost:~$ declare -rx variable=”Constant_Value”
环境变量
程序与执行它们的程序之间共享的变量。环境变量可以导出,但不能为其分配属性。
实际理解上述理论。这里我们有两个脚本0.sh和1.sh。
# 0.sh #!/bin/bash declare -rx name=Example bash 0.sh exit 0
第二个脚本是。
# 1.sh #!/bin/bash printf "%s\n" "$name" name=Example.com printf "%s\n" "$name" exit 0
这里发生的情况是,一个变量(名称)被声明为只读并被导出,然后立即调用第二个脚本。
第二个脚本只是打印了第一个脚本中第一个printf语句导出的变量。在第二个 printf 语句中,它显示了分配给变量“ name ”的新值。
不用担心,变量是只读的,如何重新分配它。你不记得“脚本运行时对变量所做的所有更改,在将变量导出到脚本外部时都会丢失。”
参考
声明命令允许以下所有开关及其组合。
- -a:声明一个数组。
- -f:显示函数和定义。
- -F:显示函数名称。
- -r:将变量声明为只读。
- -x:将变量声明为可导出。
- -I:将变量声明为整数。
目前就这些了。在下一篇文章中,我们将讨论使用“ eval ”命令替换变量的方法以及在 bash 中已定义的变量,然后结束本主题。希望大家享受深入脚本的旅程。在此之前,请继续关注并关注Example.com。