当我运行以下代码时
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
作为输出的第二行。
答案 0 :(得分:2)
您的变量扩展应该在双引号内:
for i in {0..9}
do
OCTET="*$i"
echo "i=$i, OCTET= $OCTET"
done
在双引号之外,*1
全局扩展为当前工作目录1
和31
中两个文件的名称。似乎没有其他模式(*0
,*2
,*3
等)匹配任何文件,因此它们按字面显示。
答案 1 :(得分:1)
当您编写$OCTET
(不带引号)时,您要求shell尝试将变量的值与文件名模式匹配。因此,如果文件1
和31
存在,则*1
将替换为该名称列表。
如果你不打算这样做(你可能没有),你应该引用扩展:"$OCTET"
。