Shell符号展开

字符 展开 

这个 “*” 字符意味着匹配文件名中的任意字符 
shell 把 “*” 展开成了另外的东西 ,在 echo 命令被执行前。

~家目录 
算术表达式展开 
算术表达式展开使用这种格式: 
$((expression)) 
echo $((2+2)) 
算术表达式只支持整数(全部是数字,不带小数点) ,但是能执行很多不同的操作。这里是 
一些它支持的操作符: 
操作符 说明 
+ 加 
- 减 
* 乘 
/ 除(但是记住,因为展开只是支持整数除法,所以结果是整 
数。 ) 
% 取余,只是简单的意味着, “余数” 
** 取幂 
在算术表达式中空格并不重要,并且表达式可以嵌套。例如,5 的平方乘以 3: 
[[email protected] ~]$ echo $(($((5**2)) * 3)) 
75 
一对括号可以用来把多个子表达式括起来。通过这个技术,我们可以重写上面的例子,同 
时用一个展开代替两个,来得到一样的结果: 
[[email protected] ~]$ echo $(((5**2) * 3))

花括号展开 
与数学(a+b)(c+d)一样 = ac+ad+bc+bd

通过它,你可以从一个包含花括号的模式中创建多个文本字符串。这是一个例子:

[[email protected]]# echo abc-{A,B,C}-CBA
abc-A-CBA abc-B-CBA abc-C-CBA

花括号展开模式可能包含一个开头部分叫做报头,一个结尾部分叫做附言。花括号表达式 
本身可能包含一个由逗号分开的字符串列表,或者一系列整数,或者单个的字符串。 
这个例题使用了一系列整数: 
[[email protected] ~]$ echo Number_{1..5} 
Number_1 Number_2 Number_3 Number_4 Number_5

一系列以倒序排列的字母: 
[[email protected] ~]$ echo {Z..A} 
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

花括号展开可以嵌套:

[[email protected]]# echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b

最普遍的应用是,创建一系列的文件或目录列表。 
例如,如果我们是摄影师,有大量的相片。我们想把这些相片按年月先后组织起来。首先,我们要创建一 
系列以数值 “年-月” 形式命名的目录。通过这种方式,目录名按照年代顺序排列。我们可以键 
入整个目录列表,但是工作量太大了,并且易于出错。反而,我们可以这样做: 
[[email protected] ~]$ mkdir Pics 
[[email protected] ~]$ cd Pics 
[[email protected] Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12} 
[[email protected] Pics]$ ls 
2007-01 2007-07 2008-01 2008-07 2009-01 2009-07 
2007-02 2007-08 2008-02 2008-08 2009-02 2009-08 
2007-03 2007-09 2008-03 2008-09 2009-03 2009-09 
2007-04 2007-10 2008-04 2008-10 2009-04 2009-10 
2007-05 2007-11 2008-05 2008-11 2009-05 2009-11 
2007-06 2007-12 2008-06 2008-12 2009-06 2009-12

命令替换

命令替换允许我们把一个命令的输出作为一个展开模式来使用:

echo $(ls)

双引号

引用的第一种类型,双引号。如果你把文本放在双引号中,shell 使用的特

殊字符,除了 $,\ (反斜杠) ,和 ‘(倒引号)之外,则失去它们的特殊含义,被当作普通字符

来看待。这意味着单词分割,路径名展开,波浪线展开,和花括号展开都被禁止,然而参数展

开,算术展开,和命令替换仍然执行。使用双引号,我们可以处理包含空格的文件名。

单引号

如果需要禁止所有的展开,我们使用单引号。

输出比较结果

[[email protected] ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER 
text /home/me/ls-output.txt a b foo 4 me 
89 
[[email protected] ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER" 
text ~/*.txt {a,b} foo 4 me 
[[email protected] ~]$ echo ‘text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER‘ 
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER

反引号

`ls`

转义字符

有时候我们只想引用单个字符。我们可以在字符之前加上一个反斜杠,在这个上下文中叫

做转义字符。经常在双引号中使用转义字符,来有选择地阻止展开。

注意在单引号中,反斜杠失去它的特殊含义, 它被看作普通字符。

时间: 2024-10-23 06:53:50

Shell符号展开的相关文章

Shell的展开

Shell的展开 2018-5-30 ? Writen By Stephen.Yu 一.路径名展开 shell执行echo命令前,在命令行上自动展开任何符合条件的字符,例如这里,* 被展开成当前的路径名. 类似的: 二.花括号展开 花括号展开可以用来创建多个文本字符串,例如: 花括号可以嵌套 创建以时间命名的目录 三.参数展开 例如: 原文地址:https://www.cnblogs.com/TmHm/p/9113668.html

Shell参数展开

参数展开(parameter expansion)是shell提供变量值在程序中使用的过程. 展开运算符 包括替换运算符和模式匹配运算符 替换运算符 运算符 替换说明 记忆 ${varname:-word} 若varname存在且非null,则返回其值:否则返回word. 空则返回word ${varname:=word} 若varname存在且非null,则返回其值:否则,设置varname的值为word,并返回其值.改变变量的值. 空则返回word,并改变变量值 ${varname:?mes

shell符号解释

#符号详解 () 在子shell中运行 (a=1);echo $a,结果是空,因为a=1不是在当前shell中运行的(a=1);(echo $a)也是空的 小技巧:(cd $path, do something) 可以让不切换当前目录而在其它目录干点别的事儿~ () 还有个功能是数组的赋值:比如a=(1 3 5),那么${a[0]}=1;${a[1]}=3;${a[2]}=5,需要注意的是,下标是从0开始的. (()) 表达式计算 a=1;((a++));echo $a,这时a就是2了. <()

shell中的特殊符号

Shell符号及各种解释对照表: Shell符号 使用方法及说明 # 注释符号(Hashmark[Comments]) 1.在shell文件的行首,作为shebang标记,#!/bin/bash; 2. 其他地方作为注释使用,在一行中,#后面的内容并不会被执行,除非: 3. 但是用单/双引号包围时,#作为#号字符本身,不具有注释作用. ; 作为多语句的分隔符(Command separator [semicolon]). 多个语句要放在同一行的时候,可以使用分号分隔.注意,有时候分号需要转义.

shell基础之符号与语法

        shell脚本现在已经成为了一种非常普遍的脚本语言,之所以如此广泛的被应用,毋庸置疑它是有它的独到之处的.shell脚本语言和其他的语言比如说c/c++有何不同呢?c/c++等语言属于编译型语言,也就是说程序每次执行前都要经过编译生成可执行的二进制文件方可:而shell属于解释型语言,它必须依赖解释器来逐行解释命令,现在我们所熟知并常用的解释器为bash解释器.所以以后学习使用一门解释型语言的时候,必不可少的是首先得下载一个解释器.下面就来看一个简单的shell脚本: #! /b

Linux下高效编写Shell——shell特殊字符汇总

Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对照表的形式,以便快速的查找.看看你知道下表中哦你的哪些Shell符号呢? Shell符号及各种解释对照表: Shell符号 使用方法及说明 # 注释符号(Hashmark[Comments]) 1.在shell文件的行

bash shell认知

shell原理认知: 关于shell中的通配符* shell先展开通配符后再传给命令,例如"ls -ld /usr/include/*"先展开为"ls -ld file-list," 查看历史: 可以通过history命令来查看命令历史 可一使用!!执行上一条命令 bash启动: 查找全局设置/etc/profile,之后查找用户主目录下的设置,.bash_profile .bash_login .profile.按优先级,前面的文件执行了后面的就不会执行. 命令行

shell第四篇(下)

摘自王垠的:Unix的缺陷 我想通过这篇文章解释一下我对 Unix 哲学本质的理解.我虽然指出 Unix 的一个设计问题,但目的并不是打击人们对 Unix 的兴趣.虽然 Unix 在基础概念上有一个挺严重的问题,但是经过多年的发展之后,这个问题恐怕已经被各种别的因素所弥补(比如大量的人力).但是如果开始正视这个问题,我们也许就可以缓慢的改善系统的结构,从而使得它用起来更加高效,方便和安全,那又未尝不可.同时也希望这里对 Unix 命令本质的阐述能帮助人迅速的掌握 Unix,灵活的应用它的潜力,避

shell临时笔记

-eq 等于 -ne 不等于 -gt 大于 -ge 大于等于 -lt 小于 -le 小于等于 seq 1 30  从1到30的数字 touch -mt201003030303.03 $Dir    修改目录的时间格式 stat /tmp/1.dir                   查看修改时间 LINES=`grep '^#' $file |wc -l` echo "$file:$LINES"           //可以用多个变量   取结果要用``赋值给变量 cat file.