我试图在循环中使用循环变量。但似乎它在使用一次后失去了它的价值(可能是我的误解)。这是我的代码
for i in {2000..2014}
do
echo “training representation$i_by_$i and testing representation$1999_by_$i”
done
我希望输出应该是这样的 -
training representation2000_by_2000 and testing representation1999_by_2000
但实际输出是这样的 -
training representation2000 and testing representation1999_by_??
任何人都可以帮忙吗?
答案 0 :(得分:2)
因为你在字符串周围使用了引号。字符”
不是shell的特殊字符,因此它被视为变量名称的一部分。但是没有名为i”
的变量。
更改为字符串周围的ASCII双引号。此外,由于_
可以是变量名,因此当变量后跟该字符(或任何其他可以在变量名中的字符)时,您需要使用${i}
;否则,它正在寻找名为$i_by_
的变量。
最后,$1999
被解释为$1
(脚本的第一个参数)followed by
999 . To prevent that, you need to escape the
$`。
for i in {2000..2014}
do
echo "training representation${i}_by_$i and testing representation\$1999_by_$i"
done
停止使用文字处理程序编辑程序。使用编程编辑器,它不会自动纠正您的报价。
答案 1 :(得分:2)
好吧,你错过了一些引号,你可以使用那种引号,但是当你在调用变量$i
后添加_时,bash认为你正在调用另一个名为{{$i_by_
的变量。 1}}。
尝试:
for i in {2000..2014}
do
echo "training representation"$i"_by_"$i"and testing representation1999_by_$i"
done
通过它,您可以打印5个对象,training representation
,$i
,_by_
,$i
和and testing representation1999_by_$i
获得所需的输出:
“training representation2000_by_2000and testing representation1999_by_2000”
此外,最后你有$1999
,我误以为。
编辑:正如评论中所建议的那样,你也可以使用:
echo "training representation${i}_by_${i}and testing representation1999_by_${i}"
使用引号内的变量。
@Barmar:那些报价很好,问题不存在;我试过这两种方式并以同样的方式工作。