编写使用进程替换的if语句的更强大和可靠性是什么?

时间:2017-05-22 21:22:59

标签: bash

我在bash遇到了“情况”,我不知道正确答案(我研究过,但没有找到令人信服的答案)。

基本上,问题与特定bash进程替换首先保存到变量而不是直接在if语句上进行扩展有关。 我的目标是可靠性/稳健性高于其他方面

考虑您可以选择以下两个代码段,并且您只能选择其中一个而不更改它们:

代码1:

var2="$(cut -d',' -f5 <<< "$var1")"
if [ "$var3" = "$var2" ]; then ...

代码2:

if [ "$var3" = "$(cut -d',' -f5 <<< "$var1")" ]; then ...

考虑到目标是稳健性/可靠性,您会使用以上哪一个(Code 1Code 2),为什么?随意扩展您的答案在讨论可靠性问题后,还要包括其他您认为合适的区域。

2 个答案:

答案 0 :(得分:2)

两者都不可取;使用read分割字符串而不是cut

IFS=, read -r _ _ _ _ var2 _ <<< "$var1"
if [ "$var3" = "$var2" ]; then

您可以改为使用数组:

IFS=, read -a fields <<< "$var1"
if [ "$var3" = "${fields[4]}" ]; then

如果由于某种原因你 使用cut,那么 你选择哪一个

答案 1 :(得分:1)

@JamilSaid,我认为你的问题是合理的,尽管它有点偏离典型的SO问题。 @chepner的回答讨论了如何以更好和最佳的方式编写特定代码(这是非常好的),而不是原理。

我会选择第一种方法,原因如下:

  • 它更具可读性 - 较长的if条件通常难以阅读
  • 如果我们有错误处理,则在流程替换步骤
  • 之后立即插入该代码会更容易
  • 更好地分配责任 - if条件的工作只是检查字符串而不担心它们是如何进入的 存在