tlcl-从shell眼中看世界echo

shell眼中看世界

echo-显示一行文本


当输入一个命令,bash在执行命令之前,会对输入的字符做展开处理


路径展开

echo *

shell*展开为当前目录下的文件名称,会打印出当前目录下的文件名称,

echo d*       打印出当前目录下所有以d开头的文件

echo *d       打印出当前目录下所有以d结尾的文件

 

~展开

echo ~        打印出当前用户的家目录信息

echo ~test    打印出test用户的家目录信息

 

算术表达式展开

echo $((expression))

echo $(((2*3)+5))

echo $(((2**3)*5))

注意表达式的格式,算术表达式只支持整数和加减乘除、取余、幂运算。

 

花括号展开

从一个花括号的模式中创建多个文本字符串

echo hello{1,2,3}   将会输出hello1 hello2 hello3

echo hello {1,2,3}  将会输出hello 1 2 3

echo hello{a,b,c}   将会输出helloa hellob helloc

注意:{}中的元素要用,分隔,可以是字符,也可以是字符串

最常见的应用是创建一系列的文件或目录

mkdir hello{1,2,3,4,5}

 

参数展开

echo $USER     打印出用户名

查看变量列表

printenv |less

当展开的变量是不存在的时候,系统会将其展开成为一个空字符串

echo $HELLO

 

命令替换

将一个命令的输出作为展开式

echo $(ls)

ls -l $(which cp)       whic cp的输出信息作为ls的参数

或是 

ls -l `which cp`        旧版的shell支持,倒引号

 

引用

echo hello     world

将会在屏幕上打印出hello world

echo the total is $100.00

将会在屏幕上打印出 the total is 00.00

在第一个中,shell会删除多余的空格,在第二个中,$会对1进行变量展开,而1并不是变量,所以会将其展开成为空字符串

shell提供了一种引用的机制,它会有效的控制字符的展开

 

双引号

第一种引用类型来控制字符的展开

如果在文本两端添加””,那么文本中除了$ \ `(倒引号)外,其他字符都将不会有特殊展开含义

在双引号中,参数展开、表达式展开、命令展开仍然有效

echo “$USER $((2**3)) $(ls)”

echo “hello    world”      会打印出hello     world

 

单词分割机制

echo hello    world

这时会输出hello world

在默认情况下,单词分割机制会在单词中寻找空格、制表符、换行符,并把它们看作单词之间的界定符,而每个单词都是一个参数,在上例中就有两个参数,打印出每个参数用空格界定

同样,如果你输入 echo $(cal)

那么此时打印出的是一行有空格界定的数据,而不含有换行符

如果输入  echo “hello    world”

单词分割被禁止,其实就是””内部的内容作为一个参数存在,而不加””却是两个参数

看看 echo $(cal)echo “$(cal)”的区别

 

 

单引号

第二种引用限制字符展开,单引号会限制所有字符的展开,所有的字符只有本身的含义,不存在特殊含义

 

转义字符

\来禁止特殊字符的展开,注意在单引号中\将失去作用

echo \”hello world\”

 

反斜杠转义序列的使用

\a 发出警告声;

\b 删除前一个字符;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab

\v \f相同;

 例如\a响铃

echo -e ‘\a’           -e选项来解释转义字符,虽然\在单引号中失去作用,但-e选项解释了它

echo $’\a’    

不能够直接echo “\a”

最后学习一个-n选项

-n   不换行的输出

Echo “hello”;echo “world”     此时会两行输出hello world          

Echo -n “hello”;echo “world”  则会一行输出helloworld

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。