linux shell-同一个shell的变量的有效范围

问题描述

同一个shell的变量的有效范围

为什么变量LIBS_DIR在cat内的值是正确的为什么在最后的一个echo就变为空了?

是这个变量有有效范围了么?

cat $PWD/.tmp | while read line

do
echo "creat main line:$line"
SUB_PATH=$line
SUB_NAME=${SUB_PATH##*/}
echo "$SUB_NAME/lib${SUB_NAME}.a"
LIBS_DIR=$LIBS_DIR" "$SUB_NAME/lib${SUB_NAME}.a
echo "LIBS_DIR:$LIBS_DIR"
done;
echo "LIBS_DIR:$LIBS_DIR"

执行结果为:

creat main line:/home/test/gun/m1
m1/libm1.a
LIBS_DIR: m1/libm1.a
creat main line:/home/test/gun/m2
m2/libm2.a
LIBS_DIR: m1/libm1.a m2/libm2.a
creat main line:/home/test/gun/m3
m3/libm3.a
LIBS_DIR: m1/libm1.a m2/libm2.a m3/libm3.a
LIBS_DIR:

解决方案

顶起来,晚上就要交作业了,很奇怪,为什么第一个LIBS_DIR可以,最后一个LIBS_DIR就错了,哎,无解哇~~

解决方案二:

我猜时作用域的关系。
前一个 ECHO 的 LIBS_DIR 仅在 do...done 域内生效;
后一个 ECHO 的 LIBS_DIR 其实在外部域内没定义。
它们是两个变量。

时间: 2024-12-24 00:38:11

linux shell-同一个shell的变量的有效范围的相关文章

linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来

问题描述 linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来 配置文件config.txt 内容为: abc=/home/test 计划在shell脚本中获取等号后面的路径,shell脚本如下; #!/bin/bash var=`grep abc /home/test/config.txt` #获取abc开头的一行 echo $var put_path=${put_line##*=} #截取等号后面路径 echo "${put_path}/1.txt" 可以获

linux shell sed awk-linux shell替换(通过变量修改文档值)

问题描述 linux shell替换(通过变量修改文档值) 现有变量VAR= 1, 2,3,4为一个数组,去依次修改文档 例如: 1 2 3 4 5 6 7 8 9 中第二行第三列的数值,得到4个文档分别为: 1 2 3 1 2 3 1 2 3 1 2 3 4 5 1 4 5 2 4 5 3 4 5 4 7 8 9 7 8 9 7 8 9 7 8 9 该怎么用脚本实现?请大神指教 解决方案 这种用python脚本来做更容易点.

Linux/Unix shell sql 之间传递变量

       灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考.        Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一.示例 1.shell变量接受sql返回值之方式一 oracle@SZDB:~> more ./retval.sh #!/bin/bash RETVAL=`

如何在shell脚本中使用变量

如何在shell脚本中使用变量 在每种编程语言中,变量都扮演了一个重要的角色.在Linux shell脚本编程中,我们使用两种类型的变量:系统定义的变量和用户定义的变量. shell脚本中的变量是用来调用一个数值或者字符值的手段.与正规的编程语言不同的是,shell脚本不要求你去为变量声明一个类型. 在本文中,我们将讨论shell脚本编程中的变量及其类型,以及如何设置和使用这些变量. 系统定义的变量: 这些变量由操作系统(Linux)自身创建并维护,通常它们以大写字母定义,我们可以通过命令"$

linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)

程序员都很懒,你懂的! 最近在开发中,需要用到服务器的ip和mac信息.但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题.下面是在windows系统上,java获取本地ip的方法.贴代码: package com.herman.test; import java.net.InetAddress; /** * @see 获取计算机ip * @author Herman.Xiong * @date 2014年5月16日 09:35:38 */ public class

linux基础之Shell Script入门介绍_linux shell

linux基础之Shell Script 1 Shell Scipt使用指令和基本程序设计结构写成的程序,可以完成复杂的处理流程 1.1 程序书写 复制代码 代码如下: #!/bin/bash# Program:#       This program shows "Hello Wrold" in your screen.# History:# 2013/2/3 on_1y First releasePATH=$PATHexport PATHecho -e "Hello Wo

linux下执行shell命令方法简介_linux shell

linux下执行shell命令有两种方法  在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令  1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shell命令,命令行直接执行给出结果.比如这样: 2.在当前shell中产生一个subshell,在subshell中执行shell命令 比如我们把shell写成shell脚本的方式来运行,这个时候会先启动一个subshell来代替当前的shel

shell编程下 特殊变量、test / [ ]判断、循环、脚本排错

第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~]# cat /server/scripts/show2.sh #!/bin/bash echo $1 $2 $# if [ $? == 0 ];then    echo "OK" fi 实例1-1 执行的不同结果 [root@znix ~]# sh  /server/scripts/show2.sh  1 2 3 4 6 1 2 5 [root@znix ~]#

Linux CentOS下shell显示-bash-4.1$不显示用户名路径

  Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: 而不是我们经常看到的username@hostname的组合,看起来很不舒服. 解决方案: 问题的原因是因为没有配置.bash_profile的问题,可以通过配置这个文件来解决问题. 1.在Terminal输入: [plain] vi ~/.bash_profile 2.如果没有.bash_profile可以自己添加.然后往文