V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gastrodia
V2EX  ›  Ubuntu

Linux Shell 如何把命令执行结果赋值给变量

  •  
  •   gastrodia · 2015-05-03 19:54:33 +08:00 · 33251 次点击
    这是一个创建于 3492 天前的主题,其中的信息可能已经有所发展或是发生改变。

    测试脚本如下: cat test.sh
    echo "123" > tmp.txt
    var= cat tmp.txt;echo $var"abc"
    echo "123""abc"

    执行结果:./test.sh
    123
    abc
    123abc

    请问为什么$var"abc"中奖会有一个换行符呢?

    9 条回复    2015-05-05 12:23:36 +08:00
    elvodn
        1
    elvodn  
       2015-05-03 19:57:39 +08:00
    echo "123" > tmp.txt
    var=$(cat tmp.txt);echo $var"abc"
    echo "123""abc"
    goodryb
        2
    goodryb  
       2015-05-03 22:09:20 +08:00   ❤️ 2
    这哪里是$var"abc"中间有换行符,根本就是上面的输出有问题
    echo "123" > tmp.txt #此行没有输出任何东西在屏幕上

    var= cat tmp.txt;echo $var"abc" #此行会先输出123在屏幕上,因为cat tmp.txt了,看样子你是想把cat出来的123赋值给var,但是实际上并没有赋值成功,你的语法有问题,所以cat之后会输出123并且换行,因此var是空值,后面实际执行是echo "abc"

    echo "123""abc" #此行输出123abc没啥说的

    ---------------------------------------------------------------
    调试shell脚本可以使用 sh -x ****.sh,有详细输出内容

    var= cat tmp.txt;echo $var"abc" 改成如下的形式

    var= `cat tmp.txt`;echo $var"abc"或者 #注意不是单引号,是tab键上面1前面的那个符号
    var=$(cat tmp.txt);echo $var"abc"
    FatGhosta
        3
    FatGhosta  
       2015-05-03 22:26:38 +08:00
    同意2楼说的var= `cat tmp.txt`;
    `《---这个符号就可以了。
    gastrodia
        4
    gastrodia  
    OP
       2015-05-03 22:58:57 +08:00
    @goodryb 感谢回答 完全理解了
    extreme
        5
    extreme  
       2015-05-03 23:33:36 +08:00
    提醒一下,Bash的echo默认在末尾加了换行符"\n",所以你cat那个文件多了一个换行符,给echo加上-n参数就能不自动加换行符了。
    jyhmijack
        6
    jyhmijack  
       2015-05-04 07:55:12 +08:00 via iPhone
    直接用反引号就好啦。
    echo带给你的换行符。
    ryd994
        7
    ryd994  
       2015-05-04 13:02:08 +08:00
    echo "123" > tmp.txt
    echo `<tmp.txt`abc
    或者
    echo $(cat tmp.txt)abc
    就好啦
    PS:双括号有惊喜
    gastrodia
        8
    gastrodia  
    OP
       2015-05-05 10:39:38 +08:00
    @ryd994 - -! 什么惊喜
    ryd994
        9
    ryd994  
       2015-05-05 12:23:36 +08:00
    @gastrodia 可以做数学……
    http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html
    3.4.5和3.4.6
    bash好玩的还有很多,慢慢探索………………
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.