Bash脚本读取值不符合比较条件
我正在读取csv文件并逐行回显Bash脚本读取值不符合比较条件,bash,csv,syntax,Bash,Csv,Syntax,我正在读取csv文件并逐行回显 #!/bin/bash while IFS=";" read username first last password do echo "I got:$username $first $last $password" if [ -z "$password" ] then echo "null" fi done < users.csv 比较[“$password”=$'
#!/bin/bash
while IFS=";" read username first last password
do
echo "I got:$username $first $last $password"
if [ -z "$password" ]
then
echo "null"
fi
done < users.csv
比较
[“$password”=$'\r']
有效。谢谢你的set-x
请添加一个shebang,然后将你的脚本粘贴到,并尝试实现那里提出的建议。测试代码应该是[-z“$password”]
。。。结束括号前有一个空的电子空间丢失。shellcheck在更改括号后显示所有内容。如果文件中的行末尾可能有不可见/未打印的内容,请检查。是否处于这种状态(在这种情况下,unix工具会将行视为在末尾有非打印回车)?最后一行“;”后面有空格或制表符吗?在脚本开始处添加命令set-x
,将在执行时打印一条跟踪,这可能会澄清发生了什么。使用set-x时,它表明变量是\r,但如果我将其与之比较,它仍然不起作用,我不推荐此解决方案。如果您得到的文件不是DOS/Windows格式,并且当前文件中的回车符(\r
)也会出现在有密码的行上,则该测试将失败,并且可能会导致出现问题。与其绕着它转,不如把它移走。请参阅我链接的问题以获取可能的解决方案。您也可以在IFS=$时使用\r'read…',然后让
read`命令为您修剪它。
lm;Lukáš;Masák;kjfask
spilk;Lukáš;Rasák;56456
kour;Lukáš;drtič;
hole;Lukáš;March;
lmmama;Lukáš;March;