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

2015-05-03 19:54:33 +08:00
 gastrodia

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

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

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

33101 次点击
所在节点    Ubuntu
9 条回复
elvodn
2015-05-03 19:57:39 +08:00
echo "123" > tmp.txt
var=$(cat tmp.txt);echo $var"abc"
echo "123""abc"
goodryb
2015-05-03 22:09:20 +08:00
这哪里是$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
2015-05-03 22:26:38 +08:00
同意2楼说的var= `cat tmp.txt`;
`《---这个符号就可以了。
gastrodia
2015-05-03 22:58:57 +08:00
@goodryb 感谢回答 完全理解了
extreme
2015-05-03 23:33:36 +08:00
提醒一下,Bash的echo默认在末尾加了换行符"\n",所以你cat那个文件多了一个换行符,给echo加上-n参数就能不自动加换行符了。
jyhmijack
2015-05-04 07:55:12 +08:00
直接用反引号就好啦。
echo带给你的换行符。
ryd994
2015-05-04 13:02:08 +08:00
echo "123" > tmp.txt
echo `<tmp.txt`abc
或者
echo $(cat tmp.txt)abc
就好啦
PS:双括号有惊喜
gastrodia
2015-05-05 10:39:38 +08:00
@ryd994 - -! 什么惊喜
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好玩的还有很多,慢慢探索………………

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/188162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX