我可以得到有关转义 shell 变量的解释吗?

我可以得到有关转义 shell 变量的解释吗?

我有一个 C 程序,正在将其集成到 shell 脚本中。其中有一行代码可以使用来获取 $HOME 的出生时间system("stat $HOME | awk 'FNR == 8 {print}' | awk '{print $2}'"); ,它在 C 中运行良好。当我将该行回显到 bash 时:

echo system(\"stat $HOME | awk 'FNR == 8 {print}' | awk '{print $2}'\");>> file.c

第二个 awk 管道没有发生。因此不会得到:2021-04-11

我得到:出生:2021-04-11 18:28:25.373220337 -0400

我不明白这里的问题。我检查了生成的 C 代码,它缺失了,$2 这就是第二个 awk 函数失败的原因。好的,所以我转义了 with,\$2 但我不明白为什么我需要这样做。我没有转义其他 shell 变量$HOME ,但运行正常。

答案1

所有这些$都被 shell (bash) 解释为变量"。它们需要被转义。

此外,它们还(由 shell 进行解释,需要对字符串进行完整的引用。

echo "system(\"stat \$HOME | awk 'FNR == 8 {print}' | awk '{print \$2}'\")" >> file.c

除此之外,一旦$HOME里面有空间,就会遇到问题。

提醒:bash 和 C 中有更好的方法来获取所需的信息。

例如对于bash:

date -d "$( stat -c %w "$HOME" )" +%F

相关内容