测试脚本如下: cat test.sh
echo "123" > tmp.txt
var= cat tmp.txt;echo $var"abc"
echo "123""abc"
执行结果:./test.sh
123
abc
123abc
请问为什么$var"abc"中奖会有一个换行符呢?
1
elvodn 2015-05-03 19:57:39 +08:00
echo "123" > tmp.txt
var=$(cat tmp.txt);echo $var"abc" echo "123""abc" |
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" |
3
FatGhosta 2015-05-03 22:26:38 +08:00
同意2楼说的var= `cat tmp.txt`;
`《---这个符号就可以了。 |
5
extreme 2015-05-03 23:33:36 +08:00
提醒一下,Bash的echo默认在末尾加了换行符"\n",所以你cat那个文件多了一个换行符,给echo加上-n参数就能不自动加换行符了。
|
6
jyhmijack 2015-05-04 07:55:12 +08:00 via iPhone
直接用反引号就好啦。
echo带给你的换行符。 |
7
ryd994 2015-05-04 13:02:08 +08:00
echo "123" > tmp.txt
echo `<tmp.txt`abc 或者 echo $(cat tmp.txt)abc 就好啦 PS:双括号有惊喜 |
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好玩的还有很多,慢慢探索……………… |