1,Linux中,shell在执行的时候会经过几个处理步骤
例如echo this is a test 和echo *的输出结果的区别,*是经过特别处理了。
2,另外说几项命令,来学习记忆一下。
echo * |
echo work/*
echo [[:upper:]]*
ls -a 和ls -A是有区别的,ls -a是全部,但是ls -A是合理的。
ls -d .[!.]?* 这是取开头是一个.并且第二个不是.并且至少后面有字符的名字。
3,~ 主目录相关。
4,算术表达式
echo $((2+2))
echo $(($((5**3)) +3)) **取幂,并且算术表达式可以嵌套,但是只能取整。
5,花括号展开
echo Front-{A,B,C}-back
echo Number_{1..5}
echo {z..a}
echo a{A{1,2},B{3,4}}b 花括号也可以嵌套。
6,参数展开
echo $USER
7,命令替换 (相当于把命令的结果传参)
echo $(ls)
ls $(which cp)
ls `which cp` 和上面的是等价的,将$()换成了倒引号。另外这个是老版本命令行的,bash中在使用。
8,前面的都是shell的展开,后面讲控制shell的展开。
a,双引号
双引号括上的,被视作文本(除了$ \ ``之外的)。参数展开,算术展开,命令替换任然执行。
cal
echo cal
echo $(cal)
echo "$(cal)"这四者之间的区别。 命令行将不带引号的由空格,\t,\n分隔的单词看做一个个参数,因此,会去掉多余的空格和\t\n等。而用双引号括起来之后,就是只有一个参数了。例如:echo this is a test和echo“this is a test”之间的区别,cal的原因也是这个。
b,单引号
单引号是禁止所有的引用
参数展开,算术展开,命令替换也不可以,可以试一下,对比。
c,转移字符,反斜杠\
阻止展开的作用
ASCII码表中前32个字符被用来把命令转输到电报机一样的设备。控制码
\a 响铃
\b 退格符
\n 新的一行
\r 回车符
\t 制表符
echo -e会解释转义序列,只用echo的话,\n不会换行,还是\n输出到屏幕。