抛弃Keil吧!用Clion调试STM32的5个高效技巧(HAL库实战)
2026/3/29 16:00:03
本文探讨一下Shell 中变量展开(variable expansion)的时机和引号规则。我们来逐个分析:
A=123 echo "$A"A=123echo"$A"输出很可能是空行(即$A为空),而不是123。
A=123(因为赋值只对后续命令生效),"$A"被展开为空字符串。A=123 echo ""→ 输出空行。💡 技术细节:
A=123 cmd这种写法表示“临时为cmd设置环境变量A=123”,但变量展开发生在cmd启动之前,而" $A "是在当前 Shell中展开的,不是在cmd的环境中。
$A=123echo"$A"# ← 输出为空$A=123sh-c'echo "$A"'123# ← 这样才对!因为 $A 在子 shell 中展开echo '$A'echo'$A'输出字面量:
$A'...'会禁止所有展开(包括变量、命令、转义等)。'$A'就是字符串$A,不会被替换成值。✅ 这在需要原样输出
$A字符串时是有用的,比如写配置模板。
echo输出123?有以下几种正确方式:
A=123echo"$A"A=123sh-c'echo "$A"'# 或A=123bash-c'echo "$A"'A=123;echo"$A"| 写法 | 输出 | 是否符合“输出 123”的意图 | 说明 |
|---|---|---|---|
A=123 echo "$A" | (空) | ❌ | $A在赋值前就展开了 |
echo '$A' | $A | ❌ | 单引号禁止变量展开 |
A=123; echo "$A" | 123 | ✅ | 先赋值,后使用 |
A=123 sh -c 'echo "$A"' | 123 | ✅ | 在子进程中使用临时环境变量 |
"...":允许变量展开($A→ 值)'...':禁止一切展开($A→ 字符串$A)VAR=value command:仅对command的环境设置变量,但当前 Shell 的展开先发生✅ 所以,
两种写法都不对(如果你的目标是输出
123)。
正确做法是:先赋值,再引用,或者在子 shell 中使用临时变量。