将1连接到星号给出1 31

时间:2015-03-24 20:36:01

标签: bash

当我运行以下代码时

for i in {0..9}
do
    OCTET="*$i"
    echo "i="$i", OCTET=" $OCTET
done

我得到以下输出

i=0, OCTET= *0
i=1, OCTET= 1 31
i=2, OCTET= *2
i=3, OCTET= *3
i=4, OCTET= *4
i=5, OCTET= *5
i=6, OCTET= *6
i=7, OCTET= *7
i=8, OCTET= *8
i=9, OCTET= *9

我希望得到

i=1, OCTET= *1

作为输出的第二行。

2 个答案:

答案 0 :(得分:2)

您的变量扩展应该在双引号内:

for i in {0..9}
do
    OCTET="*$i"
    echo "i=$i, OCTET= $OCTET"
done

在双引号之外,*1全局扩展为当前工作目录131中两个文件的名称。似乎没有其他模式(*0*2*3等)匹配任何文件,因此它们按字面显示。

答案 1 :(得分:1)

当您编写$OCTET(不带引号)时,您要求shell尝试将变量的值与文件名模式匹配。因此,如果文件131存在,则*1将替换为该名称列表。

如果你不打算这样做(你可能没有),你应该引用扩展"$OCTET"