首页 > 其他分享 >bash算术求值和errexit陷阱

bash算术求值和errexit陷阱

时间:2023-05-04 19:06:44浏览次数:53  
标签:count errexit ++ things 求值 bash


原文:https://www.technovelty.org//linux/bash-arithmetic-evaluation-and-errexit-trap.html

在 "traps for new players" 一章:


count=0
things="0 1 0 0 1"

for i in $things;
do
   if [ $i == "1" ]; then
       (( count++ ))
   fi
done

echo "Count is ${count}"


看上去很正常? 我可能已经这么写好多次了。但这是一个意想不到的错误:

((expression)) 表达式按 ARITHMETIC EVALUATION 描述的规则求值. 如果表达式的值非0,返回值为0; 否则返回值是1. 这个和let "expression"是相同的.

 -e或使能errexit执行该脚本时 -- 也许是由于脚本过大而变的不可信 -- count++ 将返回 0

标签:count,errexit,++,things,求值,bash
From: https://blog.51cto.com/u_16097040/6244019

相关文章

  • Bash—source命令&export命令&bashrc文件
    当不使用source命令执行脚本时,会创建一个子shell,在该子shell中执行完脚本后退出子shell。不是用export定义的变量只对该shell有效,对子shell是无效的。如下图所示,一开始VA没有用export定义,所以第一次执行test.sh脚本时子shell访问不到父shell定义的VA,输出空......
  • Cygwin、MSYS2 Bash封装函数restart,重启Windows程序进程向导,输入序号一键重启对应进程
    概述作用:终端输入restart,根据菜单提示输入序号重启特定的软件或进程,定义的重启函数太多不便于记忆的情况,特别是手机远程终端(如:JuiceSSH)连接的情况下,减少手动输入和误操作,其中判定浏览器进程使用了另一篇文章中预定的函数wmicps,ps2为指向wmicps的alias(详见:https://www.cnblog......
  • 【ChatGPT】GPT-3.5 能理解 Bash 吗?与 ChatGPT AI 结对编程
    目录用ChatGPT和Bash脚本进行实验第一次尝试——ChatGPT试图解决这个问题第二次尝试——ChatGPT纠正了自己的错误第三次尝试——ChatGPT再次尝试如果一开始你没有成功......至少你会学到一些东西总结在过去的几个星期,我们已经听到了很多关于人工智能和自然语言处理的消息—......
  • Bash 中的特殊字符大全
    Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对照表的形式,以便快速的......
  • 为Helm生成针对于bash shell的自动补全脚本,helm命令补全
    在当前shell会话中加载自动补全:source<(helmcompletionbash)为每个新的会话加载自动补全,执行一次:helmcompletionbash>/etc/bash_completion.d/helm ......
  • centos7 安装bash5.0
    查看自己bash的版本/bin/bash--version下载bash5.0版本wgethttp://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz解压tarzxvfbash-5.0.tar.gz进入目录cdbash-5.0编译./configure&&make&&makeinstall创建软连接mv/bin/bash/bin/bash.bakln-s/usr/local/bin/bash......
  • 03 | 写一个能产生斐波那契数列的range——惰性求值
    1.首先为了满足range概念的要求我们需要提供begin()和end()2.begin()和end()返回的应该是迭代器,注意这个地方两种可以返回两种不同类型(c++17后即可)3.为了满足迭代器概念的要求我们提供5个typedef,并根据std::input_iterator_tag类型决定我们要实现的“解引用函数”,......
  • bash shell下最方便的字符串大小写转换方法
     用tr需要新增变量,用declare或typeset需要在变量赋值前或者赋值后单独声明,都有些麻烦此方法为bash4.0以后新增,bash4.02009年发布$test="abcDEF"#把变量中的第一个字符换成大写$echo${test^}AbcDEF#把变量中的所有小写字母,全部替换为大写$echo${test^^}ABCDEF#......
  • Mac中 ~/.bashrc 或 ~/.bash_profile 的问题 [转载]
    1.问题描述熟练使用Linux的人会知道,环境变量是在~/.bashrc或~/.bash_profile中进行配置的;在MacOS中,同样也可以在这两个文件中配置环境变量,但是每次打开命令行时都需要输入source~/.bashrc或source~/.bash_profile才能生效,无法自动生效。2.解决方案需要注意的一点是,与Linu......
  • shell/bash脚本编程
    原文地址zhuanlan.zhihu.comshell/bash脚本编程残枫cps​目录收起介绍我们的第一个脚本脚本解释器用户输入测试条件判断迭代语句-循环参数传递退出状态码逻辑操作符函数函数参数传递通配符调试原文地址zhuanlan.zhihu.com原文链接对于我自己来说,学习新框架或技术......