我在bash上遇到了一个“情况”,我不知道正确的答案(我研究过,但没有找到令人信服的答案)。
基本上,这个问题与特定的bash进程替换有关,它首先被保存到变量中,而不是直接在if语句上展开。我的目标是可靠性/健壮性高于其他事物,。
考虑到您可以选择以下两个代码片段,并且您只能从这两个代码段中选择一个,而不需要更改它们:
代码1:
var2="$(cut -d',' -f5 <<< "$var1")"
if [ "$var3" = "$var2" ]; then ...代码2:
if [ "$var3" = "$(cut -d',' -f5 <<< "$var1")" ]; then ...考虑到目标是健壮性/可靠性,您将使用上述哪一种(** Code 2**) Code 1**或),以及为什么?**在讨论可靠性问题后,可以自由地扩展您的答案以包括您认为合适的其他领域。
发布于 2017-05-22 22:02:41
@JamilSaid,我认为你的问题是合理的,尽管它有点超出了典型的SO问题。@chepner的回答谈到了如何以更好和最优的方式编写特定代码(这非常好),而不是原则。
我会选择第一种方法,理由如下:
if条件通常更难读取if条件的工作只是检查字符串,而不是担心字符串是如何产生的发布于 2017-05-22 21:27:29
两者都不可取;使用read来拆分字符串,而不是使用cut。
IFS=, read -r _ _ _ _ var2 _ <<< "$var1"
if [ "$var3" = "$var2" ]; then您可以使用数组来代替:
IFS=, read -a fields <<< "$var1"
if [ "$var3" = "${fields[4]}" ]; then如果由于某种原因,您必须使用cut,那么您选择哪一个并不重要。
https://stackoverflow.com/questions/44122352
复制相似问题