zoukankan      html  css  js  c++  java
  • shell脚本基础

    shell中有许多奇特的语法:

    比如有以下一段脚本;

    #!/bin/sh
    files=`find -name *.conifg`
    for i in $files
    do
      name=${i#*/}
      dir=${name%/*}
    done

    name和dir都代表什么呢?

    假如

    i=this/is/a/path.config

    那么

    name=is/a/path.config

    dir=this/is/a  错误:应该是is/a

    也就是说%/*代表取从头到最后一个slash之前的所有内容

    #*/代表去取从第一个slash之后的所有内容

    为了更好的理解,我们看一下具体的文档,可参考Advanced Bash-Scripting Guide一书:

    ${string#substring}Strip shortest match of $substring from front of $string

    ${string%substring}Strip shortest match of $substring from back of $string

    也就是说

    #代表删除从前往后最小匹配的内容

    %代表删除从后往前最小匹配的内容

    name=${i#*/}  i:字符串this/is/a/path.config   #: 删除字符串开头到第一个匹配的位置的内容   */:匹配的位置满足(任意多个字符+/)

    这段代码的含义就是

          找到第一个满足(任意多个字符+/)字符串 的位置,this/is/a/path.config

              删除前面的内容,/is/a/path.config

                  剩余的字符串赋值给name

    dir=${name%/*}  i:字符串/is/a/path.config   %: 删除字符串结尾到第一个匹配的位置的内容   */:匹配的位置满足(任意多个字符+/)

    为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:
    假设我们定义了一个变量为:
    file=/dir1/dir2/dir3/my.file.txt
    我们可以用 ${ } 分别替换获得不同的值:
    ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
    ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
    ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt
    ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt
    ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
    ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
    ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
    ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

    记忆的方法为:

    # 是去掉左边(在鉴盘上 # 在 $ 之左边)

    % 是去掉右边(在鉴盘上 % 在 $ 之右边)

    单一符号是最小匹配﹔两个符号是最大匹配。


    ${file:0:5}:提取最左边的 5 个字节:/dir1
    ${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2
    我们也可以对变量值里的字符串作替换:
    ${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
    ${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my

  • 相关阅读:
    [Leetcode] Count and Say
    [Leetcode] Set Matrix Zeroes
    推荐系统
    异常检测
    维度约间
    聚类
    SVM的简单介绍
    tiled卷积神经网络(tiled CNN)
    数据驱动概念的复杂事件检测
    Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)
  • 原文地址:https://www.cnblogs.com/baldermurphy/p/7593804.html
Copyright © 2011-2022 走看看