社区编辑申请
注册/登录
关于 Linux Bash Shell 中变量的五个易错点
系统 Linux
这篇文章会根据我的经验给你5个友情提示。阅读后,它可以帮助您避免不必要的错误。

Linux 中的 Bash 脚本语言支持对变量的操作。但是,如果您从事过其他流行的编程语言开发,那么使用 Bash 处理变量会很容易出错。因为它的语法与其他语法不同(甚至对某些开发人员来说有点奇怪)。

这篇文章会根据我的经验给你5个友情提示。阅读后,它可以帮助您避免不必要的错误。

1. 等号周围没有空格

对于许多语言,例如 Python,在等号周围添加空格是一个好习惯,因为它可以提高代码的可读性。

但是在 Bash 中,你不应该在定义变量时添加额外的空格。

如果我声明一个变量 name,如下:

name = "Yang"

这里会有一个错误:

-bash: name: command not found

如上所示,Bash 将 name 视为命令而不是变量,因为我添加了不必要的空格。

因此,定义变量的正确方法如下:

name="Yang"

2.正确地定义数组

在 Bash 中定义一个数组并不难。我们只需要使用一对括号来包含所有元素,如下例所示:

names=("Yang" "Elon" "Bill")

俗话说得好,“细节决定成败"。我之前在编写 Bash 脚本时犯了一个严重的错误。我习惯性地使用逗号(而非空格)来分隔数组中的每个元素。

names=("Yang","Elon","Bill")

Bash 不会将逗号视为分隔符,并且在 names 数组中只有一个元素 Yang,Elon,Bill 而不是预期的三个。

3.正确选择引号

当我们在 Bash 中声明一个变量时,关于引号的使用有 3 个可选的方案:

  • 没有引号
  • 用单引号
  • 用双引号

默认情况下,Bash 中的每个值都是一个字符串。因此,如果不需要空格,我们就不需要使用任何引号。(同样,它与其他语言有些不同,在其他语言中,您不能在没有引号的情况下定义字符串)

当您需要使用引号时,请注意单引号和双引号之间的区别。

例如,让我们声明 3 个变量,如下所示。那么,truth1 和 truth2 有什么区别呢?

如果你打印它们,你会看到 truth1 是 ${name} is amazing.。而 truth2 是 Yang is amazing.。

总而言之,一对单引号内的字符串将始终被解释为它的本身。

4. 避免在命令中使用反引号

在 Bash 中,我们可以将命令的结果保存到变量中。有两种可能的方法来做到这一点:

  • variable=`command`
  • variable=$(command)

例如,要保存 ls 命令的结果,我们可以这样写:

file_list=`ls`

或者

file_list=$(ls)

但是,这里的最佳实践始终是使用第二种方法,尤其是在编写较长的脚本时。因为反引号和单引号看起来很相似,有时你可能会混淆它们。

5. 避免使用特殊名称

一些名称在 Linux 中被预定义为环境变量,如 USER、HOME、PATH 等。我们可以使用 printenv 命令列出它们。

显然,我们不应该用与环境变量相同的名称来声明我们的变量。

好消息是 Linux 中所有的环境变量都是用大写字母写的,所以我们可以用小写字母来自定义变量,以区别环境变量。这是一个好习惯。

责任编辑:庞桂玉 来源: 马哥Linux运维
相关推荐

2022-04-02 20:45:04

Hi3516开发板操作系统鸿蒙

2022-03-30 09:32:32

BashtestLinux

2022-03-29 09:33:34

LinuxShell命令

2022-03-24 08:57:30

Linux BashShell代码

2022-04-02 10:45:17

PythonShell命令

2010-06-23 11:09:14

Linux Bash

2022-05-02 18:29:35

bashshellLinux

2022-03-24 11:35:30

2022-03-22 10:00:03

Shell脚本Linux

2022-04-12 11:38:06

C语言全局变量

2010-06-23 16:31:10

Linux Bash

2022-05-16 15:35:00

漏洞黑客

2022-04-25 09:10:50

RK3568鸿蒙

2022-02-25 14:13:28

LinuxC语言开发

2022-04-30 09:09:55

SecureFXSecureCRT

2011-09-28 11:14:35

2022-04-15 10:11:03

机器学习scikit-lea

2022-04-01 09:00:00

Linux安全SSH

2010-06-23 17:34:03

Linux Bash

2022-03-16 10:14:55

C语言C++

同话题下的热门内容

除 Windows 11 外,微软刚发布的 KB5013942 也同样会导致 Windows 10 出错NVIDIA 终于发布开源 Linux GPU 内核模块为何 NVidia 的开源驱动程序对 Linux 如此重要?微软发布 Windows 11 Dev 预览版 25120:带来全新交互式桌面内容,支持 ARM64 设备Fedora 36 通过桌面大修吸引开发者,但它能取悦 Linux 之父吗?万字多图,搞懂 Nginx 高性能网络工作原理!80%的 Linux 使用者都不懂的内存问题Ubuntu 22.04 中安装最新 Wine 以运行 Windows 应用程序

编辑推荐

你应该知道的八款国产操作系统为什么你可能想要略过Ubuntu 17.04?HarmonyOS 2.0鸿蒙第二期开发者Beta公测申请指南让后端开发情何以堪?前端程序猿薪资大曝光谷歌“断供”华为!中国真写不出操作系统?
我收藏的内容
点赞
收藏

51CTO技术栈公众号

网站地图 保险百家乐 澳门星际赌场 申博官网 太阳城申博官网
申博游戏下载官方登入 太阳城申请提款登入 申博代理开户合作登入 太阳城亚洲总代理
申博太阳城现金网 申博现金网 菲律宾太阳城申博 申博游戏网址
申博 申博网址 捕鱼游戏 太阳城代理
太阳城app下载 申博游戏登入 ag真人百家乐 太阳城登入