V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gastrodia
V2EX  ›  Ubuntu

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

  •  
  •   gastrodia · May 3, 2015 · 33809 views
    This topic created in 4011 days ago, the information mentioned may be changed or developed.

    测试脚本如下: 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 replies    2015-05-05 12:23:36 +08:00
    elvodn
        1
    elvodn  
       May 3, 2015
    echo "123" > tmp.txt
    var=$(cat tmp.txt);echo $var"abc"
    echo "123""abc"
    goodryb
        2
    goodryb  
       May 3, 2015   ❤️ 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  
       May 3, 2015
    同意2楼说的var= `cat tmp.txt`;
    `《---这个符号就可以了。
    gastrodia
        4
    gastrodia  
    OP
       May 3, 2015
    @goodryb 感谢回答 完全理解了
    extreme
        5
    extreme  
       May 3, 2015
    提醒一下,Bash的echo默认在末尾加了换行符"\n",所以你cat那个文件多了一个换行符,给echo加上-n参数就能不自动加换行符了。
    KKKKale
        6
    KKKKale  
       May 4, 2015 via iPhone
    直接用反引号就好啦。
    echo带给你的换行符。
    ryd994
        7
    ryd994  
       May 4, 2015
    echo "123" > tmp.txt
    echo `<tmp.txt`abc
    或者
    echo $(cat tmp.txt)abc
    就好啦
    PS:双括号有惊喜
    gastrodia
        8
    gastrodia  
    OP
       May 5, 2015
    @ryd994 - -! 什么惊喜
    ryd994
        9
    ryd994  
       May 5, 2015
    @gastrodia 可以做数学……
    http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html
    3.4.5和3.4.6
    bash好玩的还有很多,慢慢探索………………
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5347 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 03:51 · PVG 11:51 · LAX 20:51 · JFK 23:51
    ♥ Do have faith in what you're doing.