目录
1.单引号、双引号、反引号及不加引号(echo$/grep/sed)
在 shell 脚本中,变量在不同引用方式(单引号、双引号、反引号及不加引号)的行为和区别。每种引用方式的特点如下:
- 单引号(' '):强引用,变量或命令不被解析,输出内容完全按字面量显示。
输入:
my_var="hello"
echo '$my_var'
#$my_var
- 双引号(" "):弱引用,变量或命令会被解析,推荐使用。
输入:
my_var="world"
echo "Hello, $my_var"
#Hello, world
- 无引号:容易出错,尤其是变量中有空格或特殊字符时。
my_var=hello
echo Hello, $my_var
#Hello, hello
注意:
如果变量值中包含空格或特殊字符,使用无引号会导致意外结果。例如:
#输入
my_var="hello world"
echo $my_var
#输出:
#hello world
- 反引号:执行命令并返回结果,建议使用 $()
替代。
current_date=`date`
echo $current_date
echo ($current_date)
#Fri Jan 17 12:34:56 UTC 2025
2.{}
的作用
2.1 明确变量的边界,以避免变量名与后续字符混淆。
var="Hello"
echo $varWorld # 输出为空,因为 Shell 解释为变量 `varWorld`,而不是 `var`。
echo ${var}World # 输出为 HelloWorld,使用 `{}` 明确了变量边界。
2.2 默认值操作:
${var:-default}
:如果 var
未定义或为空,则返回 default
。
${var:=default}
:如果 var
未定义或为空,赋值为 default
并返回。
echo ${var:-"Default Value"} # 若 var 未定义,则输出 "Default Value"。
echo ${var:="Default Value"} # 若 var 未定义,赋值并输出 "Default Value"。
2.3 长度计算:
${#var}
:获取变量值的长度。
var="Hello"
echo ${#var} # 输出 5
2.4字符串操作:
${var%pattern}
:从变量值末尾删除匹配 pattern
的最短部分。
${var%%pattern}
:从变量值末尾删除匹配 pattern
的最长部分。
${var#pattern}
:从变量值开头删除匹配 pattern
的最短部分。
${var##pattern}
:从变量值开头删除匹配 pattern
的最长部分。
var="hello.world.backup"
# 从末尾删除最短匹配的 ".后面的内容"
echo ${var%.*} # 输出:hello.world
3.使用awk命令输出变量总结(awk):
下面进行一个简单的示例:
info="tom"
awk 'BEGIN {print "$info"}' # 输出:$info