在抨击时,我知道如果环境变量 (EV) 包含嵌入空格,有时需要使用双引号。例如:"$JACK"
而不是$JACK
。如果 EV 的标识符不明确,有时建议使用从子字符串借用的语法。例如,因为 EV 不是$JACKA
、$JACKAN
,$JACKAND
我们也不会使用没有子字符串索引的花括号来写${JACK}ANDJILL
。
双引号似乎也能达到同样的效果。例如:"$JACK"ANDJILL
事实上,如果我们什么都不做,echo
以下内容就证明了等价性。
#!/bin/bash
TEXAS="asdf asdf"
FLORIDA="qwer""$TEXAS""qwer" # use quotes
echo $FLORIDA
ALABAMA="qwer"${TEXAS}"qwer" # use substring without indices
echo $ALABAMA
ARIZONA="qwer""${TEXAS}""qwer" # use both
echo $ARIZONA
MAINE="qwer"$TEXAS"qwer" # use neither
echo $MAINE
NEVADA="qwer""$TEXAS"qwer # last bit not quoted
echo $NEVADA
IDAHO="qwer"${TEXAS}qwer # last bit not quoted
echo $IDAHO
输出:
qwerasdf asdfqwer
qwerasdf asdfqwer
qwerasdf asdfqwer
qwerasdf asdfqwer
qwerasdf asdfqwer
qwerasdf asdfqwer
是否存在无法用双引号替代子字符串技巧的 bash 语句/构造?
答案1
Substring 具有更多功能,顾名思义,它可用于获取变量的子字符串。
例如
var='123456789'
echo ${var:2:4}
将输出
3456
使用数组时,必须使用子字符串来访问数组变量。
例如
a[0]=0
a[1]=1
a[2]=2
echo $a
将打印 0。
echo "$a[1]"
输出 0[1]
因此访问位置 1 处的数组变量如下
echo ${a[1]}
输出 1
echo "${a[@]}"
输出所有变量。即 0 1 2 在这些情况下,子字符串不能用“”重新替换