Bash 通过连接字符串为函数构造输入参数

Bash 通过连接字符串为函数构造输入参数,bash,Bash,我有一个简单的函数,它为输入参数着色 color_text_red() { echo -e "\033[0;91m$1\033[0m" } 现在,我有两个变量START\u COUNT和STOP\u COUNT,它们有一些值 START_COUNT="1" STOP_COUNT="2" 我想构造字符串[1,2],其中1,2是彩色的。所以,我这样做了: out_res="${START_COUNT}, ${STOP_COUNT}" echo "[$(color_text_red $ou

我有一个简单的函数,它为输入参数着色

color_text_red()
{
    echo -e "\033[0;91m$1\033[0m"
}
现在,我有两个变量START\u COUNT和STOP\u COUNT,它们有一些值

START_COUNT="1"
STOP_COUNT="2"
我想构造字符串
[1,2]
,其中
1,2
是彩色的。所以,我这样做了:

out_res="${START_COUNT}, ${STOP_COUNT}"
echo "[$(color_text_red $out_res)]"
遗憾的是,这只输出
[1,]

为什么
$STOP\u COUNT
缺失?

注意:

f() {
  echo "First argument: $1"
  echo "Second argument: $2"
}
var="a b"
f $var
它将输出:

First argument: a
Second argument: b
未加引号的变量使用空格字符(制表符、换行符和空格)进行拆分,然后传递给函数(即,假设IFS变量为默认值或未设置)。因此,如果变量有空格,它将被拆分。这就是为什么stackoverflow到处都建议引用变量的原因

如果只想向函数传递一个参数,则应引用变量展开式:

out_res="${START_COUNT}, ${STOP_COUNT}"
echo "[$(color_text_red "$out_res")]"
经验法则:总是在扩展前后键入
”,例如
“$var”
“$(echo 1)”
“${var#}”


一些额外的内容是:,。

color\u text\u red$out\u res
-因为您要向函数传递两个参数。它只有一个变量
$out\u res
。否则我们怎么能做到这一点?啊哈!这都是关于引用变量的!现在我明白了。谢谢@Kamil:)