我在bash
遇到了“情况”,我不知道正确答案(我研究过,但没有找到令人信服的答案)。
基本上,问题与特定bash
进程替换首先保存到变量而不是直接在if
语句上进行扩展有关。 我的目标是可靠性/稳健性高于其他方面。
考虑您可以选择以下两个代码段,并且您只能选择其中一个而不更改它们:
代码1:
var2="$(cut -d',' -f5 <<< "$var1")"
if [ "$var3" = "$var2" ]; then ...
代码2:
if [ "$var3" = "$(cut -d',' -f5 <<< "$var1")" ]; then ...
考虑到目标是稳健性/可靠性,您会使用以上哪一个(Code 1
或Code 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
条件的工作只是检查字符串而不担心它们是如何进入的
存在