bash逻辑取反技巧(bool_not函数)

bash函数不支持像其他高级语言一样的高级的返回变量,bash只能返回数值。

bash有bool变量,但是bool操作符号只能存在于[ ... ][[ ... ]]等特定语法结构中

举个例子 bash中,想要对bool变量y取反并赋值给变量x ,这样写x=!$y是不合法的,这种诉求是很常见的

此时 要么放弃bash,比如换成别的脚本语言fish、nushell、zsh等等,或者干脆换成py

但bash比起py也有好的一面,bash比py还简洁

那么bash中到底如何写一个逻辑取反函数呢?

最丑陋的办法 是 返回值让全局变量承载,但这太丑了,如果脚本很多,有重名变量,难以排查,是给自己埋雷。

好一点的办法 用eval实现像c语言中指针的味道,比方下面这个实现:

#!/bin/bash# fileName: bool_not.sh
#【描述】  bool取反
#【依赖】   
#【术语】 
#【备注】   _importBSFn "argCntEq2.sh"
function bool_not() {#断言有两个参数
argCntEq2 $* || return $?#输入bool值
local inBoolVar=$1
#返回 全局变量名
local outBoolVarName=$2#取反,放入变量notBoolVar中
local notBoolVar=false; $inBoolVar || notBoolVar=true;
#利用eval将结果局部变量赋值给入参指定的全局变量
eval "$outBoolVarName=$notBoolVar"
}#使用举例
#source bool_not.sh
# x=true ; bool_not $x "not_x" ; echo $not_x
#   eval执行了 not_x=false
#   变量not_x为false
# y=false ; bool_not $y "not_y" ; echo $not_y
#   eval执行了 not_y=true
#   变量not_y为true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 填洼处理

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用一种从外边缘往内部收缩的算法来实现对图像进行填洼处理,当然,在这个过程中,我们需要通过根据指定的最小坡度来对低洼区域进行高程修正处理。(OpenCV版本) 二、实现代码 ImageSmoothing.h #pragma onc…

DevEco Studio mac版启动不了【鸿蒙开发Bug已解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结Bug解决方案寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了【DevEco Studio mac版启动不了】的问题。 问题描述 报错如下。 -------…

如何判断第三方软件测试公司是否具有资质

在软件开发的过程中,软件测试是确保软件质量、稳定性和用户体验的关键环节。许多企业选择将软件测试工作交给专业的第三方软件测试公司来完成,以确保测试的准确性和公正性。但是,如何判断一个第三方软件测试公司是否具有资质呢?以…

Python urllib 爬虫入门(2)

本文为Python urllib类库爬虫更入门的一些操作和爬虫实例及源码。 目录 模拟浏览器请求 简单模拟 设置随机user-agent 请求超时 HTTP请求类型 Get请求 Post请求 抓取网页动态请求 封装ajax请求 调用 循环调用 抓取小说 封装请求函数 把html写入本地分析 调用 正…

2024年Docker常用操作快速查询手册

目录 一、Linux系统上 Docker安装流程(以ubuntu为例) 一、卸载所有冲突的软件包 二、设置Docker的apt存储库(这里使用的是阿里云软件源) 三、直接安装最新版本的Docker 三、安装指定版本的Docker 四、验证Docker是否安装成功…

Linux 手动部署JDK21 环境

1、下载包(我下载的是tar) https://www.oracle.com/cn/java/technologies/downloads/#java21 完成后进行上传 2、检查已有JDK,并删除(我原有是jdk8) rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps3、清理掉 profile中的j…

构建安全通信桥梁:PKI与数字证书

目录 前言 1. 密钥管理 2. 数字证书 3. PKI 4. 证书透明性 5. 实际案例 结论 前言 在数字化时代,信息和数据的传输变得日益频繁和普遍。无论是个人用户还是企业组织,都面临着保护通信和数据安全的重要挑战。而在这个保护的过程中,PKI&…

Mybatis-Plus扩展接口InnerInterceptor

InnerInterceptor 接口就是 MyBatis-Plus 提供的一个拦截器接口,用于实现一些常用的 SQL 处理逻辑,处理 MyBatis-Plus 的特定功能,例如PaginationInnerInterceptor、OptimisticLockerInnerInterceptor 等,都实现了 InnerInterceptor 接口,并添…

LINUX基础培训三十一之实操题模拟测试试卷

一、前言 针对前面章节介绍的基础知识内容,为方便实操锻炼和了解学习的掌握程度,模拟设置了这条基础操作题,在实战过程中曾给部分童鞋实操测试过。本章只给出具体题目内容,实际做题还需要搭建部署对应实操模拟环境以及设置自动评分功能,此处略过没写了,因为环境和评分都跟…

Vue项目打包APK----Vue发布App

时隔多年我又来跟新了,今天给大普家及下前端Vue傻瓜式发布App,话不多说直接上干货。 首先准备开发工具HBuilder X,去官网直接下载即可,算了直接给你们上地址吧HBuilderX-高效极客技巧。 打开软件,文件-->新建--&g…

【XR806开发板试用】基于XR806实现智能小车

一、实验功能: 1、 基于XR806实现WIFI连接路由器 2、 XR806设备创建TCP socket服务器,局域网内通过PC端TCP客服端连接XR806 TCP服务器进行指令控制小车运行(指令A:前进、B:后退、C&…

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…

Element-UI 快速入门

Element-UI 快速入门 引言 在现代Web开发中&#xff0c;前端界面的构建对用户体验至关重要。Element-UI是一个基于Vue.js的组件库&#xff0c;它提供了丰富的界面组件&#xff0c;帮助开发者快速构建出美观且功能全面的网页应用。本文将作为你的快速入门指南&#xff0c;带你…

nvm pnpm powershell

nvm 下载 在 nvm 安装路径下修改 settings.txt root: e:\xxx\nvm path: e:\xxx\nodejs npm_mirror https://npmmirror.com/mirrors/npm/ node_mirror https://npmmirror.com/mirrors/node/nvm list available nvm install 18.20.2 nvm use 18.20.2npm config list npm config …

pta题库答案c语言

PTA&#xff08;Programming Teaching and Assignment&#xff0c;程序设计与教学&#xff09;平台提供了大量的C语言练习题和题目&#xff0c;这些题目覆盖了C语言的各个知识点&#xff0c;包括基础语法、函数、数组、指针、结构体、文件操作等。对于想要提高C语言编程能力的学…

Nginx配置Https缺少SSL模块

1、Linux下Nginx配置https nginx下载和安装此处就忽略&#xff0c;可自行百度 1.1、配置https 打开nginx配置文件 vim /opt/app/nginx/conf/nginx.conf相关https配置 server {listen 443 ssl; #开放端口server_name echarts.net;#域名#redirect to https#ssl on; #旧版#ssl证…

C语言-嵌入式-STM32:FreeRTOS说明和详解

Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;FreeRTOS&#xff0c;RTX&#xff0c;RT-Thread 等这些都…

linux装R

2020-021 Anaconda装R - 知乎 因为要装rpy2 发现是服务器端 自己的虚拟环境没有装R&#xff0c;具体安装过程 参考上面那个链接 最后还要配一下R的环境

应用监控(Prometheus + Grafana)

可用于应用监控的系统有很多&#xff0c;有的需要埋点(切面)、有的需要配置Agent(字节码增强)。现在使用另外一个监控系统 —— Grafana。 Grafana 监控面板 这套监控主要用到了 SpringBoot Actuator Prometheus Grafana 三个模块组合的起来使用的监控。非常轻量好扩展使用。…

pnpm:基础使用及详解

pnpm 是一个快速、高效的包管理器&#xff0c;用于安装、管理和构建 JavaScript 项目的依赖项。它的设计理念是减少重复的模块安装&#xff0c;节省磁盘空间&#xff0c;并提供更快的安装和运行速度。 基础使用&#xff1a; 安装 pnpm&#xff1a;在终端中运行以下命令安装 pn…