脚本:运行的副作用不影响父环境,开辟了fork子进程;

函数:副作用,定义的变量,数据默认直接添加到了调用者的环境,也是它自己的环境;不想副作用影响调用者环境,就必须主动用local修饰;

shell 中的参数只有一种类型:字符串,或者数字意义的字符串;使用=就意味着对变量进行赋数值,右边默认为字符串变量

函数中要使用传数组只能:

    1.数组可以转换成字符串传入函数;

    2.不使用参数,使用全局数组

双引号在shell 中意义非凡,它不仅仅代表字符串,被它包起来的数组"${arrname[@]}",代表一个字符串,其中数组元素的分隔符为空格;

被双引号包住的包含换行符号的数据(通常是输入输出pipe),也代表了,换行符号换成空格分隔符后的数据;

IFS  对字符串分隔有影响,对${arrname[@]} 无影响,对${armname[*]} 有影响

#root@c7hp:/cmd/fun IFS=';'
#root@c7hp:/cmd/fun echo "${jfstack[@]}"
pwd /root /cmd /cmd/fun
#root@c7hp:/cmd/fun echo "${jfstack[*]}"
pwd;/root;/cmd;/cmd/fun
#root@c7hp:/cmd/fun echo  ${jfstack[*]}
pwd /root /cmd /cmd/fun
#以上分为两部分:数组数据提取  数据转换为字符串

@  echo 本身都有自己的字符串转换逻辑,并且其中没有使用公共环境设置的IFS

只有 " [*]"的组合使用了自己定义的IFS

#root@c7hp:/cmd/fun a=1
#root@c7hp:/cmd/fun echo $a
1
#root@c7hp:/cmd/fun echo ${a[0]}
1
变量与数组之间无缝扩展

awk 可以把字符串,正则,作为分隔符;

sed 可以把分隔符 替换成字符串

tr ,IFS只能把分隔符作单个字符替换;

# 参数列表变量$n  默认就是有字符串化的,不管用不用引号,用单双引号,都对它的参数化进程没有影响.

脚本可以使用source退化为函数;

尽量使用脚本,而不是函数,除非函数本身就是系统级别的作用范围;

使用脚本的好处                

  1.把函数封装在脚本中可以形成类似于文件范围的访问隔离;  

  2.脚本是文件级别的东西,文件目录,绝对路径本身就给它带来版本区分,作用范围划分的优势.

  3.linux文件有缓存机制,脚本不会明显的比内存中的函数慢,而且4.2以上版本的bash还可能直接把命令名和脚本路径hash绑定.

  4.函数从文件加载到环境后,修改函数需要重写后需要重新加载.脚本文件不存在这个步骤. 函数也是要用脚本文件落地到磁盘的.

shell中脚本与函数的使用策略的更多相关文章

  1. shell中脚本变量和函数变量的作用域

    http://blog.csdn.net/ltx19860420/article/details/5570902 1. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到she ...

  2. [Z] Shell中脚本变量和函数变量的作用域

    在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定 ...

  3. Shell中脚本变量的作用域

    原文地址:http://blog.csdn.net/abc86319253/article/details/46341839    在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的 ...

  4. shell中脚本调试----学习

    1.使用dos2unix命令处理在windows下开发的脚本 将windows下编辑的脚本放置到linux下执行的情况如下: [root@ks ~]# cat -v nginx.sh #!/bin/b ...

  5. shell编程学习笔记(五):Shell中脚本的参数

    在执行Shell脚本的时候,可以在执行时带上参数,相当于传递参数给脚本,下面我们看一下怎么使用这个参数 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/script ...

  6. shell中脚本参数传递getopts

    while getopts ":a:b:c:" opt do case $opt in a) echo "参数a的值$OPTARG" ;; b) echo &q ...

  7. shell中的函数、shell中的数组、告警系统需求分析

    7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...

  8. Shell脚本之八 函数

    一.函数定义 Linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; ...

  9. 05- Shell脚本学习--函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. 函数定义 Shell 函数的定义格式 ...

随机推荐

  1. IBase<T>

    public interface IBase<T>//基类 { IEnumerable<T> SelectAll();//查询所有 T FindById(int ID);//根 ...

  2. webpack学习笔记 (二) html-webpack-plugin使用

    这个插件的两个作用: 为html文件中引入的外部资源如script.link动态添加每次compile后的hash,防止引用缓存的外部文件问题 可以生成创建html入口文件,比如单页面可以生成一个ht ...

  3. HOMER | MEME | 转录因子的靶基因预测

    Finding Enriched Motifs in Genomic Regions (findMotifsGenome.pl) 在指定区域做motif enrichment,大大降低了假阳性. ME ...

  4. 【转】所有版本chrome、chromedriver、firefox下载链接

    所有版本chrome.chromedriver.firefox下载链接 1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是 ...

  5. Spring的事务初见

    一.事务的特性 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 一致性: 执行事务前后,数据保持一致: 隔离性: 并发访问数据库时,一个用户的事物不被 ...

  6. 本地计算机上的 postgresql 服务启动后停止解决方法

    在启动 postgresql 服务是遇到这种情况: 解决方法: 打开计算机管理====>查看应用程序日志信息,可以看出,由于日志配置错误的问题. 找到 postgresql.conf 文件,做如 ...

  7. django虚拟环境安装

    虚拟环境主要是防止不同版本的模块之间的冲突,维护多个项目的时候这个非常重要. 虚拟环境的安装 sudo apt install python-virtualenv 虚拟环境安装成功后,直接创建一个虚拟 ...

  8. PHP设置凌晨时间戳

    这种需求应是很常见的,但一直没有时间整理. 一天可以领取2次奖励,今天领完了那就等明天再来. 这里面涉及到一个很重要的一点就是凌晨12点的时间戳,以前一直在前端去做判断.最近发现在后端用PHP获取凌晨 ...

  9. [CentOS 7] TexLive2017中kpsewhich Bug的修复

    使用TexLive有一段时间了,从2015到2017,一直运行如常. 最近,想把以前的文档重新编译,却发现不能正常运行,费了好大一番工夫,才终于修复了这个bug,记录如下. 问题描述:编译一个简单的 ...

  10. 苹果手机的SB系列(3)超级烦人的账户解锁?

    不知道大家有没有这种体验,Iphone 每隔一段时间后账户就被锁定了,也不告诉你原因,就是要解锁? 我怎么感觉比做的比支付宝差多了,我注册支付宝十几年,也没有动不动就告诉了有安全原因,要解锁,要重置密 ...