【发布时间】:2014-02-02 04:10:02
【问题描述】:
我很好奇为什么在以下代码中对变量“nameExists”的赋值没有按预期工作:
nameExists=1
cat $dataFile | while read line
do
lineName=${line%%:*}
if [ "$lineName" == "$name" ]
then
echo "The entry you are trying to add already exists!"
nameExists=0
break
fi
done
if [ $nameExists -eq 1 ]
then
echo "Append here."
fi
我发现,无论我是否达到内部赋值“nameExists=0”,$nameExists 的值始终为 1。我想知道这是否是因为 do 循环内的 nameExists 变量被视为本地变量多变的。如果是这样,我将如何声明 nameExists 变量或分配给 nameExists 变量,以便在分配后保持 0 的值。
【问题讨论】:
-
你打开了shell调试/跟踪功能吗?
set -vx将显示下一个要执行的块和语句,然后在每行执行时在前面带有+符号,并用值替换变量。偶尔的 shellism(例如将大多数字符串更改为单引号字符串以及使用其他标准化符号)可能会混淆问题,因此请关注变量的值并假设-vx选项对您的字符串做正确的事情。祝你好运。
标签: shell variables unix scope variable-assignment