Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash中if-else错误 i=0 EDA=“xx7p2” 读行时 做 回声“我是--$i” echo“软件包是---$EDA--” #echo$行“\n” 如果($i>0)) 然后 package=$(echo$行| awk'{print$1}') echo“循环中的EDA包是--$EDA_包--” 如果[“$package”==“$EDA”];然后 #然后 well_bias=$(echo$行| awk'{print$2}') biasmap=$(echo$行| awk'{print$3}') 统一=$(echo$行| awk'{print$4}') echo“eda包--$package bias is--$wel biasmap is--$biasmap unified--$unified” fi fi i=$((i+1)) 完成_Linux_Bash - Fatal编程技术网

Linux bash中if-else错误 i=0 EDA=“xx7p2” 读行时 做 回声“我是--$i” echo“软件包是---$EDA--” #echo$行“\n” 如果($i>0)) 然后 package=$(echo$行| awk'{print$1}') echo“循环中的EDA包是--$EDA_包--” 如果[“$package”==“$EDA”];然后 #然后 well_bias=$(echo$行| awk'{print$2}') biasmap=$(echo$行| awk'{print$3}') 统一=$(echo$行| awk'{print$4}') echo“eda包--$package bias is--$wel biasmap is--$biasmap unified--$unified” fi fi i=$((i+1)) 完成

Linux bash中if-else错误 i=0 EDA=“xx7p2” 读行时 做 回声“我是--$i” echo“软件包是---$EDA--” #echo$行“\n” 如果($i>0)) 然后 package=$(echo$行| awk'{print$1}') echo“循环中的EDA包是--$EDA_包--” 如果[“$package”==“$EDA”];然后 #然后 well_bias=$(echo$行| awk'{print$2}') biasmap=$(echo$行| awk'{print$3}') 统一=$(echo$行| awk'{print$4}') echo“eda包--$package bias is--$wel biasmap is--$biasmap unified--$unified” fi fi i=$((i+1)) 完成,linux,bash,Linux,Bash,这里,即使两个变量相同,也不会执行第二个if语句中的语句。我在这里遗漏了什么吗?更新:基于以下小脚本的更多测试: 将$作为包变量中字符串的一部分对我来说是个问题。如果我用\$对它进行转义,我会让它使用下面提到的正确的比较运算符 用于比较(注意=前后的空格) 如果没有空格,表达式的计算结果似乎总是正确的。(另外,在前面/后面不带空格的情况下使用==将导致出现[:11:$EDAx:意外运算符) 我使用这个小脚本进行测试,您可以使用它来验证您自己的构造,希望对您有所帮助。如图所示,它可以正常工作 i

这里,即使两个变量相同,也不会执行第二个if语句中的语句。我在这里遗漏了什么吗?

更新:基于以下小脚本的更多测试:

$
作为
变量中字符串的一部分对我来说是个问题。如果我用
\$
对它进行转义,我会让它使用下面提到的正确的比较运算符

用于比较(注意
=
前后的空格)

如果没有空格,表达式的计算结果似乎总是正确的。(另外,在前面/后面不带空格的情况下使用
==
将导致出现
[:11:$EDAx:意外运算符

我使用这个小脚本进行测试,您可以使用它来验证您自己的构造,希望对您有所帮助。如图所示,它可以正常工作

 if [ "$package" = "$EDA" ] ; then
注1:我添加了
else
以确定比较结果,因为您的脚本不包含任何
else

注2:最好明确指定要运行的shell,而不是依赖于某些外部隐式环境设置,因此我建议您将
#!/bin/bash
添加到脚本中,这肯定不会有什么影响

从节目中:

字符串比较

=

等于

如果[“$a”=“$b”]

注意框中的空格

如果[“$a”=“$b”]不等同于上述内容

==等于

如果[“$a”==“$b”]

这是=


对你的问题做一个简化的版本,把它钉牢。 我无法用此示例脚本重现您的问题:

#!/bin/bash

package="\$EDA"
echo $package

if [ "$package" = "\$EDA" ] ; then
    echo "The same"
else
    echo "Not the same"
fi

顺便说一句:标题中的else在哪里?

第二个
然后
被注释掉的具体原因是什么?编辑-对不起,我看错了代码(缩进会有帮助)。我在if行本身中使用了。我尝试了不同的语法。你怎么知道它们是相同的,你没有在任何地方打印
$package
?是的,我已经打印了它,并且看到所有内容都是相同的。请使用缩进来强调代码的结构。如果你确定你的问题用2个简单的嵌套if很好地描述了语句,减少您的代码,并在没有那些嘈杂、不相关的EDA、awk和软件包的情况下创建一个。1、2、3、4美元就足够了。现在它太本地化了。在推广它的同时,您可能已经自己解决了。只想知道bash如何解释上述语句。为什么否决?我不理解,因为这解决了OP的问题(被接受的答案)。没有解释的否决票对任何人都没有帮助(OP,SO或我…)更正后,循环也将输入所有其他比较,这是不应该发生的,因为它们为false。字符串比较现在不起作用。对于每个条件,循环都将被执行。@monucool:
$EDA
既是变量又是文字值(带有文字美元符号),这非常令人困惑.你应该改变这个。
#!/bin/bash

package="\$EDA"
echo $package

if [ "$package" = "\$EDA" ] ; then
    echo "The same"
else
    echo "Not the same"
fi
#!/bin/bash
i=$1
a=$2
while read line
do
    if (( $i > 0 ))
    then
        echo "1st if "+$i
        if [ "$a" == "foo" ] ; then
            echo "2nd if"
        fi
    fi
    i=$((i+1))
done < nfoo.sh
#!/bin/bash
i=$1
a=$2
while read line
do
    if (( $i > 0 ))
    then
        arr=($line)
        echo "1st if "+$i
        if [ "if" == "${arr[0]}" ] ; then
            echo "2nd if: " $line
        fi
    fi
    i=$((i+1))
done < nfoo.sh