获取变量_Bash技巧:详解用$获取变量值是否要加双引号或者大括号

2c975a6f19e55fe46e9bedf0884b662f.png

本篇文章介绍在 Linux bash shell 中,用 $ 获取变量值时,是否要加双引号、是否要加大括号。

用 $ 获取变量值是否要加双引号

在 bash shell 脚本中,用 $ 来获取变量值时,有一些不加双引号,例如 $arg。有一些会加双引号,例如 "$arg"
下面具体说明这两种形式之间的区别,什么情况下要加双引号,什么情况可以不加双引号。

在 bash 中,各个参数之间默认用空格隔开。
当参数值本身就带有空格时,如果不加双引号把参数值括起来,那么这个参数值可能会被扩展为多个参数值,而丢失原本的完整值。
具体举例说明如下:

$ function test_args() { echo $#: $#; echo first: $1; echo second: $2; }$ args="This is a Test"$ test_args $args$#: 4first: Thissecond: is$ test_args "$args"$#: 1first: This is a Testsecond:

这里定义了一个 test_args 函数,打印传入的 $1、$2 参数值。
所给的 args 变量指定的字符串含有空格。

可以看到,当执行 test_args $args 时,args 变量的值被空格隔开成四个参数。
而执行 test_args "$args" 时,args 变量的值保持不变,被当成一个参数。
使用双引号把字符串括起来,可以避免空格导致单词拆分。

即,当我们需要保持变量本身值的完整,不想被空格扩展为多个参数,那么就需要用双引号括起来。

在给脚本或函数传递参数时,我们可能不确定获取到的参数值是否带有空格。
为了避免带有空格导致不预期的单词拆分,造成参数个数发生变化,建议传参时每个参数都使用双引号括起来。

用 $ 获取变量值是否要加大括号

在 bash shell 脚本中,用 $ 来获取变量值时,有一些不加大括号,例如 $var。有一些会加大括号,例如 ${var}
下面具体说明这两种形式之间的区别,什么情况下要加大括号,什么情况可以不加大括号。

查看 man bash 里面对 ${parameter} 表达式的含义说明如下:

${parameter}
The value of parameter is substituted.
The braces are required when parameter is a positional parameter with more than one digit, or when parameter is followed by a character which is not to be interpreted as part of its name.
The parameter is a shell parameter or an array reference (Arrays).

即,大括号 {} 的作用是限定大括号里面的字符串是一个整体,不会跟相邻的字符组合成其他含义。

例如,有一个 var 变量值是 "Say",现在想打印这个变量值,并跟着打印 "Hello" 字符串,也就是打印出来 "SayHello" 字符串。
那么获取 var 变量值的语句和 "Hello" 字符串中间就不能有空格,否则 echo 命令会把这个空格一起打印出来。
但是写为 $varHello 达不到想要的效果。
具体举例如下:

$ var="Say"$ echo $var HelloSay Hello$ echo $varHello$ echo ${var}HelloSayHello$ echo "$var"HelloSayHello

可以看到,$var Hello 这种写法打印出来的 "Say" 和 "Hello" 中间有空格,不是想要的结果。
$varHello 打印为空,这其实是获取 varHello 变量的值,这个变量没有定义过,默认值是空。${var}Hello 打印出了想要的结果,用 {} 把 var 括起来,明确指定要获取的变量名是 var,避免混淆。"$var"Hello 用双引号把 $var 括起来,也可以跟后面的 "Hello" 字符串区分开。

即,当用 $ 获取变量值时,如果变量名后面跟着空白字符,隔开了其他内容,可以不用大括号来把变量名括起来。

如果变量名后面直接跟着不属于变量名自身的其他字符,就需要用大括号把变量名括起来,以便明确该变量的名称

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值