在Bash中,参数展开时无法匹配变量中的空格,例如$*和$@。这是因为Bash默认使用空格作为参数的分隔符。然而,我们可以使用双引号来解决这个问题。
下面是一个示例代码,展示了如何在参数展开时匹配带有空格的变量:
#!/bin/bash
# 设置带有空格的变量
my_var="var1 var2 var3"
# 使用$*展开参数(不包含空格)
echo "Using \$*:"
for arg in $my_var; do
echo $arg
done
# 使用双引号的"$*"展开参数(包含空格)
echo "Using \"\$*\":"
for arg in "$my_var"; do
echo $arg
done
# 使用$@展开参数(不包含空格)
echo "Using \$@:"
for arg in $my_var; do
echo $arg
done
# 使用双引号的"$@"展开参数(包含空格)
echo "Using \"\$@\":"
for arg in "$my_var"; do
echo $arg
done
在上面的示例中,我们使用双引号将变量包裹起来,以便在展开参数时保留空格。使用双引号的"$*"将整个变量视为一个参数,而不是将其拆分为多个参数。同样,使用双引号的"$@"也会将整个变量视为一个参数。
运行上述代码,将输出以下结果:
Using $*:
var1
var2
var3
Using "$*":
var1 var2 var3
Using $@:
var1
var2
var3
Using "$@":
var1 var2 var3
从结果中可以看出,使用双引号的"$*"和"$@"能够正确展开包含空格的变量。
上一篇:Bash参数展开从两个方向
下一篇:bash参数转换产生错误的替换”