shell中命令之间数据的传递

1.管道 "|"

   ls | cat -n > out.txt

2. 子shell

  2.1 子shell 说明

    在shell脚本中可以用()操作符可以定义一个子shell   

#/bin/bash
pwd
(cd / ; ls)
pwd

  执行结果

  

  说明: 当命令在子shell中执行的时候不会对当前shell有任何影响

  2.2 获取子shell 中的数据

    cmd_output=$(COMMANDS)

    out=$(ls -l | cat -n)

#!/bin/bash
out=$(ls -l | cat -n)
echo $out

  输出结果:

  

  问题所在: 行和行之间的回车键没了。这显然是我们不想要的结果

  解决办法:将子shell的结果放入双引号中,保留换行符

  

#!/bin/bash
out=$(ls -l | cat -n)
echo $out
out="$(ls -l | cat -n)"
echo $out

  执行结果:

  

  什么鬼!!!居然没有变化。 难道书上写错啦!!

  最后在网上找到了问题的答案: IFS(内部域分隔符)

  IFS详情: http://www.2cto.com/os/201504/394478.html

  将IFS设置成"\n"换行符就可以了

  

#!/bin/bash
out=$(ls -l | cat -n)
echo $out
IFS="\n"
out="$(ls -l | cat -n)"
echo $out

  

3. 反引用(与单引号可不是一回事)

  out.txt=·ls | cat -n·

  其它操作与子shell相同

时间: 2024-10-31 05:49:40

shell中命令之间数据的传递的相关文章

shell中命令间的逻辑关系

在shell中命令执行成功返回值为0,不成功返回值为非0 逻辑与: shell中0为真,非0为假 第一个条件为真时,第二条件必须判断: 第一个条件为假时,第二条件不再判断,最终结果为假: 当第一个命令执行成功继续执行第二个命令,最终结果由第二个命令执行结果决定. 当第一个命令执行失败第二个命令不再执行,最终结果为失败. 理解为乘法运算(0为假1为真) 1*1=1        1*0=0          0*1=0        0*0=0 例: 1.user1存在,前一条命令执行成功,第二条

ASP.NET MVC5中View-Controller间数据的传递

使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢? 本文对于View向Controller中传值共列举了以下几种方式: QueryString RouteData Model Binding Form 使用和Action参数同名的变量进行传递 Cookie 对于Controller向View中传值则列举了以下几种方式: 单个值的传递 Json 匿名类型 ExpandoObject ViewBag.ViewDa

android界面之间数据的传递

不同界面之间,数据的传递是很常用的一个操作,这种数据的携带也是很简单的. 效果: 跳转后: 这个例子很简单,但是我们把第一个界面输入的姓名张三顺利传递到了第二个界面 附代码如下: 主界面: 1 package com.yy.activity.value; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.text.TextUt

shell中命令的执行流程

在shell中,一个命令有3中写法: 1 可以直接写(Normal Command) 2 可以放在双引号中("Command") 3 可以放在单引号中('Comand') 这3中写法,命令的执行流程也是不一样的,如下图所示: alias替换 将alias替换成真正的命令,比如将ls替换成ls --color=auto brace替换 将a{b,c}e替换成abe,ace ~替换 将~替换成HOME目录 变量替换 将$开头的变量替换为其真正的值 执行替换命令 即执行$(command)或

Shell中命令替换$(...)与后置引用`...`的区别与联系

一. 命令替换 a.在bash中,$( )与``(反引号)都是用来作命令替换的. b.命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行. 例子1: $ echo today is $(date "+%Y-%m-%d") today is 2014-07-01 二. $( )与``(反引号) (1)区别 `CMD`在执行时,shell会不管``内是什么都先进行解释,再把解释后的最终结果送给shell去执行.如果解释后的最终结果

【转】Bash Shell中命令行选项/参数处理

原文网址:http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home 我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数. --prefix我们称之为一个长选项,即选项本身多于一个字符

Bash Shell中命令行选项/参数处理

0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home 我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数. --prefix我们称之为一个长选项,即选项本身多于一个字符,它也需要一个参数,用等号连接,当然等号不是必须的,/home可以直接写在--prefix后面,即--prefix/home,更多的限制后

关于Shell中命令替换$(...)与后置引用`...`的不同

命令替换 在bash中,$( )与` `(反引号)都是用来作命令替换的.命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行. $( )与`` 在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下: ``很容易与''搞混乱,尤其对初学者来说. 在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观. 最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的. # 将cmd1

shell 中命令输入的快!捷!键!

非常棒!! 非常棒!! 删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符相当于VIM里d shift+$ctrl + u 删除光标前面所有字符相当于VIM里d shift+^ctrl + w 删除光标前一个单词相当于VIM里dbctrl + y 恢复ctrl+u上次执行时删除的字符ctrl + ? 撤消前一次输入alt + r 撤消前一次动作alt + d 删除光标所在