shell中while内改变外部变量和 < << <<<

2023-05-16

代码

  • 问题代码

使用管道会创建子shell。

lines="first line\nsecond line\nthird line" 
foo=0
echo -e $lines | while read line
do
    echo line: $line
    if [[ "$line" == "second line" ]]
    then
        foo=2 # 此处foo已被赋于2
        echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value of \$foo in while loop body: $foo"
done
echo "foo=$foo" #输出结果foo=0
  • "here-strings"方式修复代码

here-strings语法: command <<< "WORD"

foo=0
lines="first line\nsecond line\nthird line" 
while read line
do
    echo line $line
    if [[ "$line" == "second line" ]]
    then
        foo=2 # 此处foo已被赋于2
        echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value of \$foo in while loop body: $foo"
done <<< "$(echo -e "$lines")" # $(echo -e "$lines") 也可
echo "foo=$foo" #输出结果foo=2
  • "process substitution"方式修复代码

process substitution语法: command1 < <(command2)

注意:< <内有空格,第二个<后不能有空格

foo=0
lines="first line\nsecond line\nthird line" 
while read line
do
    echo line $line
    if [[ "$line" == "second line" ]]
    then
        foo=2 # 此处foo已被赋于2
        echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value of \$foo in while loop body: $foo"
done < <(echo -e "$lines")
echo "foo=$foo" #输出结果foo=2
  • "here-document"构造字符串代码

foo=0
lines=$(
cat << EOF
first line\nsecond line
third line
EOF
)

echo lines:$lines

while read line
do
    echo line $line
    if [[ "$line" == "second line" ]]
    then
        foo=2 # 2被赋值给foo
        echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value of \$foo in while loop body: $foo"
done <<<$(echo -e "$lines")
echo "foo=$foo" # 输出foo=2
  • "here-document"输出到文件代码

foo=0

cat << EOF > lines.txt
first line
second line
third line\nfourth line
EOF

cat lines.txt

while read line
do
    echo line $line
    if [[ "$line" == "second line" ]]
    then
        foo=2 # 2被赋值给foo
        echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value of \$foo in while loop body: $foo"
done < lines.txt
echo "foo=$foo" # 输出foo=2

lines.txt文件的内容如下

first line
second line
third line\nfourth line

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell中while内改变外部变量和 < << <<< 的相关文章

随机推荐

  • 香橙派进入系统后设置ip

    Debian 可以配置静态IP 动态IP使Debian连上互联网 用户使用nano编辑器编辑interface网卡配置文件 xff0c 为Debian系统指定本网络中的唯一IP地址 xff0c 使其能上网 方法 步骤 将用户当前目录切换到网
  • 香橙派更改中文界面以及安装输入法

    第一步更新语言包 sudo apt get install locales 第二部选择 sudo dpkg reconfigure locales 找到语言包空格键选中变 最后安装 scim 输入法相关 xff1a apt get inst
  • 香橙派添加启动脚本

    sudo nano etc rc local 后台启动 nohup root frp frpc c root frp frpc ini amp 查询日志 cat nohup out java jar root aaa jar
  • app远程访问plc实现方法

    工业上越来越多的人需要将局域网内的plc数据或者单片机的数据上传到手机app上 xff0c 实现远程的操作监控 实现的方法是借助plc支持modbus协议 xff0c 通过dtu模块实现串口透传到云服务器 xff0c 之后开发手机app实现
  • java访问西门子300plc以及仿真的测试方法

    安装step7软件 支持win7 64位系统 安装仿真软件plc sim 之后以管理员身份运行Nettoplcsim 下bin下的NetToPLCsim
  • Shell 批量拉取docker镜像(当前目录和指定目录)

    批量拉取docker容器镜像 拉取当前文件夹内的容器镜像 xff1a span class token shebang important bin sh span span class token comment 当前路径 span spa
  • docker-compose部署Jenkins+Gitlab CICD

    docker compose 搭建CICD jenkins 43 gitlab 1 修改yum源 xff08 1 xff09 备份原来的yum源 mv etc yum repos d CentOS Base repo etc yum rep
  • kubernetes Pod高级用法-探针

    POD 2高级用法 容器探测详解 所谓容器探测就是我们在里面设置了一些探针 xff0c 或者传感器来获取相应的数据用来判断容器存活与否或者就绪与否的标准 xff1b 目前k8s支持的存活性探测方式和就绪性探测方式都是一样的 xff0c 探针
  • 云原生工程师-1.容器相关

    个人博客地址 一 docker容器相关 1 服务器虚拟机容器的区别基础知识 k8s1 24之前 xff1a docker 1 24之后containerd docker主要制作镜像 xff1a docker build xff0c dock
  • nginx配置后转发没有生效的一个坑个人总结

    一 概述 nginx配置规则还是有点复杂的 xff0c 在此只总结下本人遇到的一个坑与解决方法 xff0c 具体原因还不清楚 二 配置后没有生效的坑 1 首先 xff0c 要访问的url样例是 xff1a http 10 123 123 1
  • 云原生工程师-6.k8s四层负载均衡-Service

    五 k8s四层负载均衡 Service 个人博客 5 1 什么是Service 5 1 1 Service作用 在 kubernetes 中 xff0c Pod 是有生命周期的 xff0c 如果 Pod 重启它的 IP 很有可能会发生变化
  • 云原生工程师-8.statefulset和daemonset

    七 Statefulset 有状态服务 个人博客 7 1 Statefulset相关概念 7 1 1 什么是Statefulset StatefulSet 是有状态的集合 xff0c 管理有状态的服务 xff0c 它所管理的 Pod 的名称
  • 云原生工程师-9.configmap和secret

    九 configmap 配置管理 个人博客 9 1 配置管理中心基本概念 9 1 1 什么是configmap Configmap 是 k8s 中的资源对象 xff0c 用于保存非机密性的配置的 xff0c 数据可以用 key value
  • 云原生工程师-10.K8s安全管理RBAC

    十一 K8s安全管理 xff1a 认证 xff0c 授权 xff0c 准入控制 个人博客 11 1RBAC概述 11 1 1安全管理概述 k8s 对我们整个系统的认证 xff0c 授权 xff0c 访问控制做了精密的设置 xff1b 对于
  • windows 10/11 wsl 安装 ubuntu

    微软官方连接 xff1a WSL 的手动安装步骤 Microsoft Learn 步骤 1 启用适用于 Linux 的 Windows 子系统 需要先启用 适用于 Linux 的 Windows 子系统 可选功能 xff0c 然后才能在 W
  • wsl2 与windows网络互通

    ubuntu wsl2 访问windows 方式一 xff1a ubuntu中查看 ubuntu终端中输入 cat etc resolv conf 显示结果 显示结果 This file was automatically generate
  • requires Python ‘>=3.7‘ but the running Python is 3.6.9 问题

    过程 ubuntu18 04 使用如下命令安装protobuf pip3 install protobuf 安装完毕后报错 protobuf requires Python 39 gt 61 3 7 39 but the running P
  • 拯救者Y9000P突然很卡

    描述 不知道什么原因 xff0c 拯救者Y9000P突然很卡 xff0c 打开windows 任务管理器 查看CPU性能显示速度不到1GHz 解决办法 关机 拔掉所有外设 xff0c 如鼠标 外接键盘 扩展屏幕 和其他设备 xff08 电源
  • windows电脑本通过网线分享无线网络

    条件 设备1 xff1a windows 10系统笔记本 xff08 wifi和网口 xff09 设备2 xff1a 具有网口的计算机 xff08 假设IP为 172 13 100 200 xff09 网线 期望 设备1通过wifi连接无线
  • shell中while内改变外部变量和 < << <<<

    代码 问题代码 使用管道会创建子shell lines 61 34 first line nsecond line nthird line 34 foo 61 0 echo e lines while read line do echo l