2017-04-09 212 views
0

我想在特定的命令中获得所有可能的字符串组合,除非字符串相同。我简化了我想要做的,我如何试图做到这一点,如下所示:bash:如果语句内的for循环不起作用

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 

但它似乎没有工作..任何想法我的嵌套循环出了什么问题?

+0

这可能有帮助:'help test' – Cyrus

回答

3

替换:

if [ $i -ne $p ] 

有了:

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

-ne操作要求整数。 !=运算符处理字符串。

在测试中,通常应该使用双引号字符串,除非您真的确实无法确定它们不能包含多个单词(如在单词分割之后由shell所看到的那样)。

如果使用Bash,则可以使用Bash特定的[[ ]]测试构造。一般不需要这种类型的测试

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

双引号,作为而不是一个命令,它是特殊的shell语法,而不是暴露在分词。但是,应该引用比较的右侧部分来禁用模式匹配,除非您绝对确定没有可能会使用的字符串会触发模式匹配。