我试图在某个命令中获得所有可能的字符串组合,除非字符串相同。我简化了我想要做的事情,以及我如何尝试按照以下方式进行:
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循环有什么问题?
答案 0 :(得分:3)
替换:
if [ $i -ne $p ]
使用:
if [ "$i" != "$p" ]
-ne
运算符需要整数。 !=
运算符适用于字符串。
你通常应该在测试中双引号字符串,除非你真的,确实它们不能包含多个单词(正如分词后的shell看到的那样)。
如果使用Bash,您可以使用特定于Bash的[[ ]]
测试构造。
if [[ $i != "$p" ]]
在这种类型的测试中通常不需要双引号,因为它不是命令,而是特殊的shell语法,不会暴露于单词拆分。但是,应该引用比较的右侧部分来禁用模式匹配,除非您绝对确定在那里不会使用任何字符串可能触发模式匹配。