Skip to content

Latest commit

 

History

History
109 lines (75 loc) · 1.99 KB

随笔.md

File metadata and controls

109 lines (75 loc) · 1.99 KB

随笔

想到啥写啥

echo

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''

规范的写法

老老实实用双引号,该转义的字符转义吧。