在Linux中使用shell将字符串转换为整数



我正在尝试读取包含值"的文件;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

相关内容

  • 没有找到相关文章

最新更新