想到啥写啥
echo的设计,要怎么评价呢,我觉得处理起引号的嵌套比较反人类,或者繁琐,其他都还好。
分析基于以下代码
a=1
echo $a
echo '$a'
echo "$a"
echo 'ls -l'
echo "ls -l"
echo `ls -l`
echo "`ls -l`"
假设search.sh内容如下:
grep -n "int" file
file中内容如下:
1st-int
2nd-double
3rd-long
4th-int
会在file中,找到所有包含"int"的行,然后,加上行号输出。
如果,使用echo `grep -n "int" file` > out.txt
out.txt里面是没有换行的,但是,如果使用./search.sh > echo > out.txt
echo中又出现了换行。
'
单引号:忽略特殊字符(包括$, \
和反引号),反引号就是1左边那颗键,一般来说,原封不动输出被''
括起来的内容。“不一般来说”,请看引号的嵌套。
"
双引号:会解析再输出
``` ``里面放命令,替换为被括指令的标准输出。
怀疑echo对于没有被扩起来的参数,默认使用了双引号括起来。如
a=1
echo $a
输出如下
1
这个简直就是玄学啊,请自行尝试吧
echo ''''''
echo """"""
echo '''hello'''
echo ""hello""
echo "''"
echo "'hello'"
echo '""'
echo '"hello"'
echo "'"
echo """
echo '"'
echo '''
echo "a"hello"a"
eho ""hello"_"world""
echo ''hello'_"world"'
个人认为,在不对扩起来的内容进行转义的前提下,echo永远无法输出第一层括号表示的字符。
即:echo [括号][内容][括号]
,在保证括号匹配的前提下,永远无法输出[括号]
。
比如,echo "内容"
,因为最外层是"
,所以一旦内容
中包含了匹配的"
,也会被忽略。
echo ""hello"_"world""
,内部的"
好像全被忽略了。
单引号也能解析:
name=zhangsan
echo 'my name is '$name''
老老实实用双引号,该转义的字符转义吧。