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

ops/2024/10/18 12:29:50/

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.ppmy.cn/ops/27384.html

相关文章

华纳云:ubuntu中fdisk找不到硬盘怎么解决?

如果在 Ubuntu 中使用 fdisk 命令找不到硬盘,可能是由于以下几个原因导致的: 1.未正确识别硬盘:可能是因为硬盘未被正确识别或未被操作系统识别。这可能是由于硬件连接问题、硬盘故障、驱动问题等引起的。 2.需要管理员权限:在 Ub…

leaflet加载wms服务实现wms交互

leaflet地图与wms服务的交互,点击wms服务获取地理区域信息以及后续操作 加载wms服务 给地图添加监听点击事件 构造GetFeatureInfo发送请求,需要包含WMS服务的URL、请求的类型(GetFeatureInfo)、返回信息的格式(通常是…

洛谷 P5854:【模板】笛卡尔树

【题目来源】https://www.luogu.com.cn/problem/P5854【题目描述】 给定一个 1∼n 的排列 p,构建其笛卡尔树。 即构建一棵二叉树,满足: 1.每个节点的编号满足二叉搜索树的性质。← 优先级 pri 满足二叉搜索树(BST)的性…

nginx connect 异常

1.nginx反向代理 # 测试server {listen 80;server_name local.dongpeng.com;location / {# proxy_pass http://192.168.10.131:9394;proxy_pass http://127.0.0.1:9394;}} 2.出现异常 2024/05/01 17:53:41 [error] 6#6: *1 connect() failed (111: Connection refused…

openGauss学习笔记-272 openGauss性能调优-实际调优案例01-调整查询重写GUC参数rewrite_rule

文章目录 openGauss学习笔记-272 openGauss性能调优-实际调优案例01-调整查询重写GUC参数rewrite_rule272.1 目标列子查询提升参数intargetlist272.2 提升无agg的子查询uniquecheck openGauss学习笔记-272 openGauss性能调优-实际调优案例01-调整查询重写GUC参数rewrite_rule …

【PG-2】PostgreSQL存储管理器

2. PostgreSQL存储管理器 src/backend/storage (base) torrestorresの机革:~/codes/postgresql-16.2/src/backend/storage$ ls Makefile buffer file freespace ipc large_object lmgr meson.build objfiles.txt page smgr sync存储管理器—smgr 通用存储管理器 …

Ubuntu 根目录扩容

环境 物理机:MacBook Air M2 Sonoma 14.4.1 虚拟机:VMware Fusion Player 13.5.0 镜像:Jammy Desktop ARM64 步骤 删除所有快照,关闭镜像,在 vm 上找到该镜像的硬盘设置,进行扩容; 开启镜像&am…

【Qt之·路径获取】

系列文章目录 文章目录 前言一、使用相对路径1.1 相对路径1.2 绝对路径1.3 QDir类1.4 QFileDialog对话框 二、示例2.1 示例一 总结 前言 在进行Qt开发时,经常需要获取文件的路径,如图片、音频、配置文件等。路径的获取可以通过直接指定绝对路径或者使用相…