【发布时间】:2014-09-15 06:48:41
【问题描述】:
我有一个 csv 文件,我正在使用“while read”语句读取它,我想在 csv 中的一个字段上运行 if 语句。
======================================
csv 文件
client1,admin,password,5.9
client2,admin,password,5.8
======================================
这是我的脚本
while read clientid user pass version
do
if [ '$version' = "5.9" ];
then
echo "IS"
else
echo "NOT"
fi
done < $1
问题是 if 语句不起作用。
当版本为 5.9 时,它不会回显 IS,它只是一直说 NOT,除非我将其更改为 !=
我尝试过使用单引号和双引号,即使没有...仍然无法按预期工作。
目标是运行命令直到文件结束。 该脚本是否正确执行此操作?
显然IS和NOT会被实际命令替换,这只是为了测试。
【问题讨论】:
-
不计算被单引号括起来的变量。使用双引号。
-
另外
read默认不会以逗号分隔。你需要告诉它这样做。在循环中打印出$clientid、$user、$pass和$version的值,看看你得到了什么。 -
查看
$IFS— 内部字段分隔符。read(和许多其他程序)使用它来分隔文本字符串。 -
我确实在脚本中有 IFS=","。如果我回显 $version,它会显示 5.9
-
@baum: 你能提供一个带有
IFS=,或read -d,的工作示例脚本吗?使用它时,我得到了非常奇怪的输出。
标签: bash csv if-statement while-loop nested