[20250527]bash shell编程变量作用域问题.txt --//无聊,写一个计算24点的小程序,使用bash shell编程遇到变量作用域问题,通过一个简单例子说明问题。 $ cat e4.sh #! /bin/bash result='bad' echo "$1 $2 $3 $4 * * * pq" | while read line do res=$(echo "$line " | dc 2>/dev/null) if [ $res = '24' ] then echo "method 1 : $line ok" result='ok' exit 1 fi done if [ ${result} = 'ok' ] then exit 0 else echo "$1 $2 $3 $4 bad" fi --//如果我带入参数为 1 2 3 4,这样结果等于24,应该输出结果后马上返回。 --//而实际的情况是。 $ . e4.sh 1 2 3 4 method 1 : 1 2 3 4 * * * pq ok 1 2 3 4 bad --//而且成功后result已经赋值ok了。但是下面的if判断语句还是执行echo "$1 $2 $3 $4 bad"。 --//赋值在管道里面操作,估计退出失效,应该在这个之外赋值。 --//而且管道里面exit退出了,实际上程序还是继续运行下去执行后面的代码。 $ cat e4.sh #! /bin/bash result='bad' echo "$1 $2 $3 $4 * * * pq" | while read line do res=$(echo "$line " | dc 2>/dev/null) if [ $res = '24' ] then echo "method 1 : $line ok" # result='ok' exit 1 fi done || result='ok' if [ $result = 'ok' ] then exit 0 else echo "$1 $2 $3 $4 bad" fi $ ./e4.sh 1 2 3 4 method 1 : 1 2 3 4 * * * pq ok $ ./e4.sh 1 2 3 5 1 2 3 5 bad --//也可以修改如下: $ cat e4.sh #! /bin/bash result='bad' #echo "$1 $2 $3 $4 * * * pq" | while read line for line in "$(echo "$1 $2 $3 $4 * * * pq")" do res=$(echo "$line " | dc 2>/dev/null) if [ $res = '24' ] then echo "method 1 : $line ok" result='ok' break # exit 1 fi done if [ $result = 'ok' ] then exit 0 else echo "$1 $2 $3 $4 bad" fi --//也可以这样修改: $ cat e5.sh #! /bin/bash echo "$1 $2 $3 $4 * * * pq" | while read line #for line in "$(echo "$1 $2 $3 $4 * * * pq")" do res=$(echo "$line " | dc 2>/dev/null) if [ $res = '24' ] then echo "method 1 : $line ok" exit 1 fi done && echo "$1 $2 $3 $4 bad" --//如果等于24,返回码1,这样后面的echo "$1 $2 $3 $4 bad"不会执行。 --//管道里面的赋值如何保存,我自己也不是很清楚,查询许多链接,好像不行。 --//比较科学的写法如下,如果信息在文件里面。 #! /bin/bash result='bad' while read line do res=$(echo "$line " | dc 2>/dev/null) if [ $res = '24' ] then echo "method 1 : $line ok" result='ok' break # exit 1 fi done < input.txt if [ $result = 'ok' ] then exit 0 else echo "$1 $2 $3 $4 bad" fi
[20250527]bash shell编程变量作用域问题.txt
来源:这里教程网
时间:2026-03-03 21:59:35
作者:
编辑推荐:
- [20250527]bash shell编程变量作用域问题.txt03-03
- [20250527]oracle如何实现字符串计算公式转换为数字.txt03-03
- [20250527]奇怪的sql macros.txt03-03
- 在Oceanbase桌面版体验OB自动分区表,小功能大作用!03-03
- 数据库管理-第323期 Oracle如何统计表数据量(20250509)03-03
- [20250506]drop table的恢复2.txt03-03
- [20250506]truncate table,drop table恢复使用脚本.txt03-03
- [20250506]不使用bbed扫描确定数据段号.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 在Oceanbase桌面版体验OB自动分区表,小功能大作用!
在Oceanbase桌面版体验OB自动分区表,小功能大作用!
26-03-03 - 数据库管理-第323期 Oracle如何统计表数据量(20250509)
数据库管理-第323期 Oracle如何统计表数据量(20250509)
26-03-03 - INFO OGG-06441 不是告警而容易忽略的错误
INFO OGG-06441 不是告警而容易忽略的错误
26-03-03 - 小米没想到,自家车主不服管
小米没想到,自家车主不服管
26-03-03 - 聊了十年“社交梦”,支付宝终于打通了这个电话
聊了十年“社交梦”,支付宝终于打通了这个电话
26-03-03 - 中国最良心的两个企业家,联手了
中国最良心的两个企业家,联手了
26-03-03 - Oracle官方MySQL+APEX+AI限时免费预约流程大全
Oracle官方MySQL+APEX+AI限时免费预约流程大全
26-03-03 - 国产密码新时代!华测国密 SSL 证书解锁安全新高度
国产密码新时代!华测国密 SSL 证书解锁安全新高度
26-03-03 - 数据库管理-第325期 ADG Failover后该做啥(20250513)
- 评测揭秘!同一份外卖,拼好饭为什么更有性价比?
评测揭秘!同一份外卖,拼好饭为什么更有性价比?
26-03-03
