Linux 工具:点的含义 | Linux 中国

在现实情况中,使用 shell 命令编写的单行命令或脚本可能会令人很困惑。你使用的很多工具的名称与它们的实际功能相差甚远(grep、tee和awk,还有吗?),而当你将两个或更多个组合起来时,所组成的 “句子” 看起来更像某种外星人的天书。

因此,上面说的这些对于你并无帮助,因为你用来编写一连串的指令所使用的符号根据你使用的场景有着不同的意义。

位置、位置、位置

就拿这个不起眼的点(.)来说吧。当它放在一个需要一个目录名称的命令的参数处时,表示“当前目录”:

find . -name "*.jpg"

意思就是“在当前目录(包括子目录)中寻找以.jpg结尾的文件”。

ls .和cd .结果也如你想的那样,它们分别列举和“进入”到当前目录,虽然在这两种情况下这个点都是多余的。

而一个紧接着另一个的两个点呢,在同样的场景下(即当你的命令期望一个文件目录的时候)表示“当前目录的父目录”。如果你当前在/home/your_directory下并且运行:

cd ..

你就会进入到/home。所以,你可能认为这仍然适合“点代表附近目录”的叙述,并且毫不复杂,对吧?

那下面这样会怎样呢?如果你在一个文件或目录的开头加上点,它表示这个文件或目录会被隐藏:

1、$ touch somedir/file01.txt somedir/file02.txt somedir/.secretfile.txt

2、$ ls -l somedir/

3、total 0

4、-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt

5、-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt

6、$ # 注意上面列举的文件中没有 .secretfile.txt

7、$ ls -la somedir/

8、total 8

9、drwxr-xr-x 2 paul paul 4096 Jan 13 19:57 .

10、drwx------ 48 paul paul 4096 Jan 13 19:57 ..

11、-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt

12、-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt

13、-rw-r--r-- 1 paul paul 0 Jan 13 19:57 .secretfile.txt

14、$ # 这个 -a  选项告诉 ls 去展示“all”文件,包括那些隐藏的

然后就是你可以将.当作命令。是的,你听我说:.是个真真正正的命令。它是source命令的代名词,所以你可以用它在当前 shell 中执行一个文件,而不是以某种其它的方式去运行一个脚本文件(这通常指的是 Bash 会产生一个新的 shell 去运行它)

很困惑?别担心 —— 试试这个:创建一个名为myscript的脚本,内容包含下面一行:

myvar="Hello"

然后通过常规的方法执行它,也就是用sh myscript(或者通过chmod a+x myscript命令让它可执行,然后运行./myscript)。现在尝试并且观察myvar的内容,通过echo $myvar(理所当然你什么也得不到)。那是因为,当你的脚本赋值"Hello"给myvar时,它是在一个隔离的bash shell 实例中进行的。当脚本运行结束时,这个新产生的实例会消失并且将控制权转交给原来的shell,而原来的 shell 里甚至都不存在myvar变量。

然而,如果你这样运行myscript:

. myscript

echo $myvar就会打印Hello到命令行上。

当你的.bashrc文件发生变化后,你经常会用到.(或source)命令,就像当你要扩展PATH变量那样。在你的当前 shell 实例中,你可以使用.来让变化立即生效。

双重麻烦

就像看似无关紧要的一个点有多个含义一样,两个点也是如此。除了指向当前目录的父级之外,两个点(..)也用于构建序列。

尝试下这个:

echo {1..10}

它会打印出从 1 到 10 的序列。在这种场景下,..表示 “从左边的值开始,计数到右边的值”。

现在试下这个:

echo {1..10}

它会打印出从 1 到 10 的序列。在这种场景下,..表示 “从左边的值开始,计数到右边的值”。

现在试下这个:

echo {1..10..2}

你会得到1 3 5 7 9。..2这部分命令告诉 Bash 输出这个序列,不过不是每个相差 1,而是相差 2。换句话说,就是你会得到从 1 到 10 之间的奇数。

它反着也仍然有效:

echo {10..1..2}

你也可以用多个 0 填充你的数字。这样:

echo {000..121..2}

会这样打印出从 0 到 121 之间的偶数(填充了前置 0):

000 002 004 006 ... 050 052 054 ... 116 118 120

不过这样的序列发生器有啥用呢?当然,假设您的新年决心之一是更加谨慎控制您的帐户花销。作为决心的一部分,您需要创建目录,以便对过去 10 年的数字发票进行分类:

mkdir {2009..2019}_Invoices

工作完成。

或者你可能有数百个带编号的文件,比如从视频剪辑中提取的帧,或许因为某种原因,你只想从第 43 帧到第 61 帧每隔三帧删除一帧:

rm frame_{043..61..3}

很可能,如果你有超过 100 个帧,它们将以填充 0 命名,如下所示:

frame_000 frame_001 frame_002 ...

那就是为什么你在命令中要用043,而不是43的原因。

花括号花招

说实话,序列的神奇之处不在于双点,而是花括号({})的巫术。看看它对于字母是如何工作的。这样做:

touch file_{a..z}.txt

它创建了从file_a.txt到file_z.txt的文件。

但是,你必须小心。使用像{Z..a}这样的序列将产生一大堆大写字母和小写字母之间的非字母、数字的字符(既不是数字或字母的字形)。其中一些字形是不可打印的或具有自己的特殊含义。使用它们来生成文件名称可能会导致一系列意外和可能令人不快的影响。

最后一件值得指出的事:包围在{...}的序列,它们也可以包含字符串列表:

touch {blahg, splurg, mmmf}_file.txt

将创建了blahg_file.txt、splurg_file.txt和mmmf_file.txt。

当然,在别的场景中,大括号也有不同的含义(惊喜吗!)。不过那是别的文章的内容了。

总结

Bash 以及运行于其中的各种工具已经被寻求解决各种特定问题的系统管理员们把玩了数十年。要说这种有自己之道的系统管理员是一种特殊物种的话,那是有点轻描淡写。总而言之,与其他语言相反,Bash 的设计目标并不是为了用户友好、简单、甚至合乎逻辑。

但这并不意味着它不强大 —— 恰恰相反。Bash 的语法和 shell 工具可能不一致且很庞大,但它们也提供了一系列令人眼花缭乱的方法来完成您可能想象到的一切。就像有一个工具箱,你可以从中找到从电钻到勺子的所有东西,以及橡皮鸭、一卷胶带和一些指甲钳。

除了引人入胜之外,探明你可以直接在 shell 中达成的所有能力也很有趣,所以下次我们将深入探讨如何构建更大更好的 Bash 命令行。

在那之前,玩得开心!



via:https://www.linux.com/blog/learn/2019/1/linux-tools-meaning-dot

作者:Paul Brown[3]选题:lujun9972译者:asche910校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 5,138评论 0 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,618评论 0 10
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,016评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,313评论 0 5
  • “你怎么变成这样了,你以前不是这样的!” 成长过程中需要经历的事 mp.weixin.qq.com/s/DBSm7...
    Zhannnnng阅读 510评论 5 1