要记得字符表达模式是最常见的,并且是最好用的,最容易的(但是相对而言也是最难掌握的) 例如 echo .[!..]* 意思就是说让隐藏文件,并且是开头是一个点的那种要被打印出来。
echo只支持整数的计算
- 格式
echo $((x + y))
+
-
*
/
%
余数**
幂
echo $(((3 ** 2)*12)
# 可以看出来空格并不是很重要关于shell
但是建议不要加空格,因为shell中空格很容易报错。
alias th = 'node'
# 报错,因为你在th和=中间加了空格这是不对的。
echo 这个东西是 $((12 + 12)) 个
echo 这是{1..12}月。
这是1月 这是2月 这是3月 这是4月 这是5月 这是6月 这是7月 这是8月 这是9月 这是10月 这是11月 这是12月
echo 大叫好我是{托马斯,舒克,贝塔}
# 大家好我是托马斯 大家好我是舒克 大家好我是贝塔
-
对比[1,2,3]:或者是1,或者是2或者是3
-
{1,2,3}将123全部利用上并不是随机关系。
-
echo a{A{1,2},B{3,4}}b ## aA1b aA2b aB3b aB4b
没错还可以进行嵌套。
创立从2010到2017年每月每天的文件夹。你们知道怎么用吗?
接下来的篇章会着重讲述这个
$
举例子:
ls -l $(which cp)
## 也就是说 $充当了输入流,将which cp的内容传递给了ls,作为了ls的参数。
- | 也可以让前者的输出流作为流给后者但是无法让后者的东西给前者
- 但是使用$ 就可以很好的避免了这个问题,因为$()就相当于函数的返回值一样,它在哪里都可以。
- 说真的$的方式是要比流灵活的,但是流这种方式更加简洁更加行云流水只不过需要一些特定的规矩罢了。
我们讨论一下双引号
很多功能用法只能单纯的输出了,但是
单词分割,路径名展开, 波浪线展开,和花括号展开都将失效,然而参数展开($USER
),算术展开(echo $((1 + 2))
),和命令替换(echo $(cal)
) 仍然执行
echo "$((1 + 3))"echo "$((1 + 3))"
其实这个参数展开就是使用$把系统自己设置的变量所表达的意思表达出来,就比如USER如果没有$它就是一句话罢了,但是现在有了$所以它就不是一句话了是一个变量了。
如果你遇见 hello world.text
文件你是不是很伤脑筋呢?因为当你echo hello world.text
时系统会识别成两个文件 hello 和 world.text 所以说当我们使用双引号的时候就没有这个问题了。会忽略单词分割机制
mkdir "dd dd d"
#如果没有双引号就不会忽略单词分割机制就会创立三个文件夹
mkdir dd dd d
但是说实话,我还是觉得使用标准命名法可以省很多事情。切勿玩火装13呀骚年~!
单词分割机制 : 在单词中寻找空格,制表符,和换行符,并把它们看作 单词之间的界定符。这意味着无引用的空格,制表符和换行符都不是文本的一部分, 它们只作为分隔符使用
echo 1 \
> dd
1 dd
这里很明显 \ 就是把末尾的换行符给注释掉了所以这个话就可以换行写。
echo $(cal)
September 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
echo "$(cal)"
September 2017
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
为什么会有这么大的差别,因为当$把cal的数据输出流给echo的输入流时,没有""所以说它的参数或者是输入流就不是一个了,就是很多个了,因为没有""的情况下 空格就不是空格的意思了 是表示分隔符的含义了,然而第二个就不同,这些数据并没有字母分割原理,因为系统识别他们就是一个参数这之间只是单纯的空格和换行罢了,所以就是一个整体的大的输出流被传递给了echo的输入流。
单引号是最厉害的,什么效果都没了
echo '$USER'
$USER
所以在实际中要灵活运用"" '' 和裸奔。
两个含义:
- 转义(例如$ 这种在shell中表达特殊用法的词语)
- 特殊用途
就如同上文中的\就是注释了末尾的换行符号,比如\\
就是让无法输出的特殊符号顺利输出。
特殊用途的话:
- \a 响铃(”警告”-导致计算机嘟嘟响)
- \b 退格符
- \n 新的一行。在类 Unix 系统中,产生换行。
- \r 回车符
- \t 制表符
等等。 如果让这个转移符号其效果有两个方式
- echo -e
- echo something $'\a'
- 假如是函数这种类型或者是一般就是$()
- 如果是变量这种一般都是使用$''来使用。