我有一个 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