我正在尝试读取包含值"的文件;0";用双引号括起来。在这之后,我需要根据这样的值来执行决策
while read line;do result=$line;done < File.csv
if [ $result -gt 0 ]
then
echo "Failed"
fi
现在,这给了我一个像整数一样的错误。请帮忙。
Linux是一个内核。您显示的脚本是一个shell脚本。
在Bourne shell族中,所有原子变量都是字符串。(在Bash/ksh/etc中也有数组,它们是字符串的集合。(
要从字符串两边去掉引号,请尝试以下参数展开序列:
value=${value%"}
value=${value#"}
使用shell内置程序将比使用外部进程快得多,尽管如果你在询问之前已经在谷歌上搜索过,那么其中的每一个都应该相当明显
value=$(echo "$value" | tr -d '"') # discards " everywhere
value=$(sed 's/^"(.*)"$/1/' <<<"$value") # Bash specific <<<here string
value=$(awk -v val="$value" 'BEGIN { sub(/^"/, "", val); sub(/"$/, "", val); print val }')
循环将读取并丢弃文件中的所有值,然后处理文件最后一行的内容。我猜你想在循环中处理每个值?
while IFS="" read -r line; do
result=${line%"}
result=${result#"}
[ $result -gt 0 ] && { echo "Failed" >&2; exit 1; }
done < File.csv
(注意IFS=""
和read -r
,并将错误消息打印为标准错误而不是标准输出(,但更好的解决方案是使用Awk(shell的while read -r
效率非常低,通常是错误的(;
awk '{ sub(/^"/, ""); sub(/"$/, "");
if (0+$0 > 1) { print "Failed" >>"/dev/stderr"; exit 1 } }' File.csv