<?xml version="1.0" encoding="gbk"?>
<rss version="2.0">
  <channel>
    <title>曲径通幽论坛 - 『Linux Shell』</title>
    <link>http://www.groad.net/bbs/forum.php?mod=forumdisplay&amp;fid=46</link>
    <description>Latest 20 threads of 『Linux Shell』</description>
    <copyright>Copyright(C) 曲径通幽论坛</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Fri, 10 Apr 2026 20:17:44 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>http://www.groad.net/bbs/static/image/common/logo_88_31.gif</url>
      <title>曲径通幽论坛</title>
      <link>http://www.groad.net/bbs/</link>
    </image>
    <item>
      <title>文件1中没有而文件2中有的行</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8947</link>
      <description><![CDATA[需求：找出文件1中没有，而文件2中有的行

假设文件1中的内容为：


假设文件2中的内容为：


上面的需求，只需要 grep 一个命令即可完成，如下：


解说：
先说选项 -f ，该选项后面需要接一个文件名，然后 grep 会从该文件中一次读出一行（如果文件为空， ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 14 Jun 2015 03:45:34 +0000</pubDate>
    </item>
    <item>
      <title>如何判断输入为数值类型</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8908</link>
      <description><![CDATA[可以用 bc 这个工具判断输入是否为数值类型。

在运行 bc 时，在交互环境下，当你输入一个数字类型并回车时，会返回你输入的数值；否则返回 0。利用这个特点，就可以利用 bc 来判断输入是否为数值类型。考察下面代码：
[mw_shl_code=bash,true]#!/bin/sh

var=`ech ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 03 May 2015 01:41:00 +0000</pubDate>
    </item>
    <item>
      <title>自升级 shell 程序</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8883</link>
      <description><![CDATA[有时候需要维护一个可以自升级的 shell 程序，先考虑下面这个：
[mw_shl_code=bash,true]set -o errexit        #有错误则退出

SELF=$(basename $0)
UPDATE_BASE=http://something

runSelfUpdate() {
  echo \&quot;Performing self-update...\&quot;
  # 下载新版本
  w ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Mon, 06 Apr 2015 02:03:03 +0000</pubDate>
    </item>
    <item>
      <title>单独双横杠</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8774</link>
      <description><![CDATA[在有些 shell 代码中，你可能会看到单独的双横杠。简单的说，单独双横后面的内容不作为命令参数来处理。
举一个简单的例子：

运行 ls -l -a ，那么会列出当前目录下的文件的详细信息，如果你将命令改为 ls -l -- -a ，那么 -a 就不会被当成是命令参数，而只是一个普 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Thu, 04 Dec 2014 12:36:53 +0000</pubDate>
    </item>
    <item>
      <title>export 的 -n 选项</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8770</link>
      <description><![CDATA[export 的 -n 选项是使变量失去 “全局” 特性，而非删除该变量。失去 “全局” 特性，意味着子 shell 无法获得该变量的值，但在父 shell 中仍然可以使用该变量。

tmp.sh 代码如下：
[mw_shl_code=bash,true]#!/bin/sh

export SECTION_NUM=100


sh tmp2.sh
 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Tue, 02 Dec 2014 17:24:19 +0000</pubDate>
    </item>
    <item>
      <title>read 从标准输入一次读入 2 个变量 (&lt; &lt;)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8665</link>
      <description><![CDATA[如何使用 read 从标准输入一次读入 2 个变量？ 看下面一个例子：


du 命令的 -b 选项表示获得文件的字节；-c 表示产生一个总计； -m 表示已 MB 为单位。

如果执行时只有 -b ，那么有：


如果执行时用了 -bc ，那么有：

比较可见，文件名被 total 替代。当 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 28 Sep 2014 04:04:29 +0000</pubDate>
    </item>
    <item>
      <title>获得 UNIX 时间戳毫秒</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=8119</link>
      <description><![CDATA[可以从 date 命令里获取 UNIX 时间戳，使用 %s 可以获得自 1970-01-01 00:00:00 以来的秒数；使用 %N 可以获得执行当前命令并显示结果时所经过的纳秒。因此，要获得 UNIX 时间戳的毫秒，那么可以执行下面的命令：如果是 javascript ，那么使用 Date 对象的 getTime() 方 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Tue, 05 Nov 2013 15:08:16 +0000</pubDate>
    </item>
    <item>
      <title>unset 命令</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7813</link>
      <description><![CDATA[unset 是内置 shell 命令，它用来在程序执行阶段删除变量值。

示例：


运行输出：

第二次输出为空。]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Fri, 31 May 2013 05:56:56 +0000</pubDate>
    </item>
    <item>
      <title>2&gt;&amp;1 前后位置不同分析</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7512</link>
      <description><![CDATA[在许多脚本中会看到 2&gt;&amp;1 的身影，它的意思是将标准错误(stderr)重定向到标准输出(stdin) 中去，其中 2 表示 stderr，&amp;1 表示标准输入。那么为什么不直接写成 2&gt;1 就好了呢？下面做个实验。如果我们将 2&gt;&amp;1 写成 2&gt;1：

在运行 ls 命令的目录下，tmp.txt 文件是存在的， ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 18 Nov 2012 08:32:33 +0000</pubDate>
    </item>
    <item>
      <title>使用 strace 捕获重定向的执行</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7511</link>
      <description><![CDATA[在一般情况下，我们用 strace 可以跟踪命令的执行从而获得相关的系统调用细节。在 《strace 与 stdin, stdout, stderr, 管道及重定向》里也提到过，strace 的输出是从 stderr 这里送出的，因此有时我们可能会如下形式的保存 strace 的输出结果：

这里，我们假设当前目 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 18 Nov 2012 03:12:15 +0000</pubDate>
    </item>
    <item>
      <title>使用 &#39;#&#39; 符号来表示进制</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7500</link>
      <description><![CDATA[在 shell 的一般应用中，# 符号用作注释符号。但是它也可以用来表示数的进制，如下用法：

其值输出为 9 。
上面，10# 用来强调后面的变量 $end 和 $star ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Wed, 07 Nov 2012 03:35:22 +0000</pubDate>
    </item>
    <item>
      <title>一次读一行(while 与 for)的区别</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7279</link>
      <description><![CDATA[可以用 for 和 while 实现一次读取一行，但是有点区别。

供测试文本内容如下：


使用下面的脚本一次读取一行(for 读取)：

运行输出：

由输出可以看到，测试 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Wed, 11 Jul 2012 10:37:17 +0000</pubDate>
    </item>
    <item>
      <title>在 grep 中使用 perl 正则(-P选项)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6927</link>
      <description><![CDATA[测试文本内容：

许多网址连接在一起，我们希望将这些图片网址每行独立出来，那么应该怎么做？
 
第 1 种方法使用 sed ：

这里的做法是在每个图片后缀 .jpg 后添加一个换行。
 
第 2 种方法使用 perl 来实现：
[code=perl]#!/usr/bin/perl

$_ = \&quot;http://im ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sat, 28 Apr 2012 00:55:37 +0000</pubDate>
    </item>
    <item>
      <title>%.* , %%.*, #*., ##*.</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6715</link>
      <description><![CDATA[%.* 和 %%.*
看一段代码：

运行输出：

%.* 和 %%.* 它们都是从右到左匹配，匹配完后去掉匹配部分。它们的输出之所以不同是因为前者是非贪婪性匹配，而后者是贪婪性匹配。对  ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Sun, 25 Mar 2012 07:02:12 +0000</pubDate>
    </item>
    <item>
      <title>IFS 分隔符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6675</link>
      <description><![CDATA[IFS 的全称是 Interal Field Separator ，即“内部区域分隔符”，它也是一个内置环境变量，存储着默认的文本分隔符，默认下这分隔符是空格符(space character)，制表符(tab) 以及新行(newline) 。先看下面一个简单示例：
[mw_shl_code=bash,true]#!/bin/sh

msg=\&quot;welcom ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Wed, 21 Mar 2012 15:29:44 +0000</pubDate>
    </item>
    <item>
      <title>数组(普通数组与关联数组)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6652</link>
      <description><![CDATA[bash shell 支持两种数组，一种是普通数组，即以数字作为下标索引；另一种是关联性数组，下标索引可以是字符串(需 bash 4.0 及以上)。

声明一个数组：

打印数组内容：
[mw_shl_code=bash,true]#!/bin/sh


myarray=(1 3 5 7 9 11)


for i in {0..5}
do
        echo  ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Tue, 20 Mar 2012 04:58:35 +0000</pubDate>
    </item>
    <item>
      <title>自定义文件描述符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6650</link>
      <description><![CDATA[众所周知，3 个基本的文件描述符为 0, 1, 2 分别表示标准输入，标准输出，标准错误。在 shell 里也可以根据需要自定义文件描述符。
 
1. 先创建一个普通的文本文件：

 
2. 打开该文件，并赋予一个自定义的文件描述符用以读：

 
3. 可以利用文件描述符来读取文件：

 
 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Tue, 20 Mar 2012 03:26:03 +0000</pubDate>
    </item>
    <item>
      <title>2&gt;&amp;1 与 &amp;&gt; 的含义</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6648</link>
      <description><![CDATA[2&gt;&amp;1 的含义是，将标准错误作为标准输出的一个拷贝 ，相当于调用了 dup2 (1,2) 这个函数，也就是说原本写到标准错误里的内容会被定向到标准输出中去。
 
比如：

上面，tmp.txt 的内容为 \&quot;hello shell\&quot;，而 temp.txt 文件并不存在于当前目录下，因此：

注意 2&gt;&amp;1 书写 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Tue, 20 Mar 2012 02:13:30 +0000</pubDate>
    </item>
    <item>
      <title>算术运算</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6640</link>
      <description><![CDATA[在 shell 中经常会使用到一些算术运算，下面简单的做一些总结：

1. 最基本的赋值

运行输出：


2. 使用let 命令进行运算
[mw_shl_code=bash,true]!/bin/sh
 
var1=10

let var1++

 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Mon, 19 Mar 2012 16:01:16 +0000</pubDate>
    </item>
    <item>
      <title>使用 echo 输出加色内容</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6405</link>
      <description><![CDATA[在 echo 里使用先使用 -e 选项打开转义功能，然后用 \&quot;\\e+颜色代码\&quot;便可以输出具有加色的内容，包括前景色和背景色。
 
比如输出红色字体，背景色保持不变：


上面 [1;31m 表示给输出内容加上红色前景色，而 [0m 表示使字体恢复默认设置。

又比如输出背景色为绿色，而 ...]]></description>
      <category>『Linux Shell』</category>
      <author>beyes</author>
      <pubDate>Mon, 05 Mar 2012 02:16:23 +0000</pubDate>
    </item>
  </channel>
</rss>