bash:如果语句内的for循环不起作用
问题描述:
我想在特定的命令中获得所有可能的字符串组合,除非字符串相同。我简化了我想要做的,我如何试图做到这一点,如下所示: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
但它似乎没有工作..任何想法我的嵌套循环出了什么问题?
答
替换:
if [ $i -ne $p ]
有了:
if [ "$i" != "$p" ]
的-ne
操作要求整数。 !=
运算符处理字符串。
在测试中,通常应该使用双引号字符串,除非您真的确实无法确定它们不能包含多个单词(如在单词分割之后由shell所看到的那样)。
如果使用Bash,则可以使用Bash特定的[[ ]]
测试构造。一般不需要这种类型的测试
if [[ $i != "$p" ]]
双引号,作为而不是一个命令,它是特殊的shell语法,而不是暴露在分词。但是,应该引用比较的右侧部分来禁用模式匹配,除非您绝对确定没有可能会使用的字符串会触发模式匹配。
这可能有帮助:'help test' – Cyrus