你会引用这个从一些预先计算的组件构建日志消息的变量赋值吗?
formatted_message=$(printf '%s [PID %s] %s (%s) %s:%s | %s\n' \
"${TIMESTAMP}" \
"${PROCESS}" \
"${SEVERITY}" \
"${SOURCE}" \
"${FUNCTION}" \
"${LINE}" \
"${MESSAGE}")
这真的是好的 Bash 编程风格吗?
我很喜欢尝试学习一些 Bash,但是我发现有些东西“效率低下”:
- 当有很多关于引号在不同上下文中的含义的规则时,我必须不断解析(使用“思维编译器”)我阅读的代码,重新阅读,重新阅读,应用一些隐含的规则,这些规则是上下文-具体的(例如,表达式的左侧、右侧、应用于数组的扩展与标量值等),这在心理上很麻烦,至少对我来说是这样。在我对世界的简单看法中,拥有固定的约定和简单的异常将使我能够更快地阅读代码,有时编写代码时会使用一两个额外的字符,但对于一般情况来说,非常“自动”,尤其是能够更多地识别异常容易。
让我们举一个例子,让我对“最佳编码实践”感到困惑:
[[ $x == "$x" ]]
我可以省略左侧的引号而不会真正改变行为。将它们添加到评估的右侧会产生重要影响。突然之间,我想知道进程替换和“评估/替换”的所有其他上下文,并希望有一种简单的方法可以做到这一点,几乎没有例外。
如果有这方面的指导文章/博客文章,我真的会详细研究它,了解(希望)真正的Bash 程序员在将引号放在省略它们的特定位置时想要传达的内容。
注意:我的学习发生在晚上的收费站。除了你们之外,我没有其他程序员可以将我的观点与我的观点进行比较,并且一些开源代码“就在那里”,没有随附的评论来证明像“编码风格”这样微妙的选择是合理的。
另一点:我发现总是输入更容易:
printf "${my_string_var}"
但当然这也很好:
printf "$my_string_var"
(我只是碰巧用 更好地“看到”了变量扩展{}
)
但这可能不等同于分词变量内容(?!)
printf $my_string_var # with $my_string_var := 'foo bar'
概括
如果您只想回答一个简单、直接的问题并远离“辩论”:
- 你会引用上面的第一个作业吗?为什么?
注意:我的一个问题是最终\n
消失了,即使我尝试在这里和那里加上双引号..但现在我明白它会$()
剥离它..