首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写使用进程替换的if语句有哪些更健壮、更可靠?

编写使用进程替换的if语句有哪些更健壮、更可靠?
EN

Stack Overflow用户
提问于 2017-05-22 21:22:58
回答 2查看 88关注 0票数 1

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

基本上,这个问题与特定的bash进程替换有关,它首先被保存到变量中,而不是直接在if语句上展开。我的目标是可靠性/健壮性高于其他事物,

考虑到您可以选择以下两个代码片段,并且您只能从这两个代码段中选择一个,而不需要更改它们:

代码1:

代码语言:javascript
复制
var2="$(cut -d',' -f5 <<< "$var1")"
if [ "$var3" = "$var2" ]; then ...

代码2:

代码语言:javascript
复制
if [ "$var3" = "$(cut -d',' -f5 <<< "$var1")" ]; then ...

考虑到目标是健壮性/可靠性,您将使用上述哪一种(** Code 2**) Code 1**或),以及为什么?**在讨论可靠性问题后,可以自由地扩展您的答案以包括您认为合适的其他领域。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-22 22:02:41

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

我会选择第一种方法,理由如下:

  • 它的可读性更强--较长的if条件通常更难读取
  • 如果我们有错误处理,那么在进程替换步骤之后插入代码就更容易了。
  • 更好的职责授权-- if条件的工作只是检查字符串,而不是担心字符串是如何产生的
票数 1
EN

Stack Overflow用户

发布于 2017-05-22 21:27:29

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

代码语言:javascript
复制
IFS=, read -r _ _ _ _ var2 _ <<< "$var1"
if [ "$var3" = "$var2" ]; then

您可以使用数组来代替:

代码语言:javascript
复制
IFS=, read -a fields <<< "$var1"
if [ "$var3" = "${fields[4]}" ]; then

如果由于某种原因,您必须使用cut,那么您选择哪一个并不重要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44122352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档