bash:if循环中的语句不起作用

时间:2017-04-09 17:42:15

标签: bash for-loop if-statement

我试图在某个命令中获得所有可能的字符串组合,除非字符串相同。我简化了我想要做的事情,以及我如何尝试按照以下方式进行:

for i in a b c
do
for p in a b c
do
if [ $i -ne $p ]
then
echo "$i and $p"
fi
done
done

我期望的输出是:

a b
a c
b a
b c
c a
c b

但它似乎没有用..任何想法我的嵌套for循环有什么问题?

1 个答案:

答案 0 :(得分:3)

替换:

if [ $i -ne $p ]

使用:

if [ "$i" != "$p" ]

-ne运算符需要整数。 !=运算符适用于字符串。

你通常应该在测试中双引号字符串,除非你真的,确实它们不能包含多个单词(正如分词后的shell看到的那样)。

如果使用Bash,您可以使用特定于Bash的[[ ]]测试构造。

if [[ $i != "$p" ]]

在这种类型的测试中通常不需要双引号,因为它不是命令,而是特殊的shell语法,不会暴露于单词拆分。但是,应该引用比较的右侧部分来禁用模式匹配,除非您绝对确定在那里不会使用任何字符串可能触发模式匹配。