Shell编程之变量的高级用法详解

论坛 期权论坛     
niminba   2021-5-23 05:17   0   0
<h2>变量替换<br>
</h2>
<p>
<table>
    <tbody>
        <tr>
            <td>语法</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>${变量名#匹配规则}</td>
            <td>从变量<strong>开头</strong>进行规则匹配,将符合<strong>最短</strong>的数据删除</td>
        </tr>
        <tr>
            <td>${变量名##匹配规则}</td>
            <td>从变量<strong>开头</strong>进行规则匹配,将符合<strong>最长</strong>的数据删除</td>
        </tr>
        <tr>
            <td>${变量名%匹配规则}</td>
            <td>从变量<strong>尾部</strong>进行规则匹配,将符合<strong>最短</strong>的数据删除</td>
        </tr>
        <tr>
            <td>${变量名%%匹配规则}</td>
            <td>从变量<strong>尾部</strong>进行规则匹配,将符合<strong>最长</strong>的数据删除</td>
        </tr>
        <tr>
            <td>${变量名/旧字符串/新字符串}</td>
            <td>变量内容符合就字符串,则<strong>第一个</strong>旧字符串会被新字符串替换</td>
        </tr>
        <tr>
            <td>${变量名//旧字符串/新字符串}</td>
            <td>变量内容符合就字符串,则<strong>全部的</strong>旧字符串会被新字符串替换</td>
        </tr>
    </tbody>
</table>
</p>
<p>示例<br>
</p>
<div class="blockcode">
<pre class="brush:bash;">
var1="hello world hello world"
# 所谓最长和最短其实就是正则表达式中的贪婪模式和非贪婪模式

# 删除匹配规则为*lo的数据(开头最短删除)
echo ${var1#*lo}
-&gt; world hello world

# 删除匹配规则为*lo的数据(开头最长删除)
echo ${var1##*lo}
-&gt; world

# 删除匹配规则为hel*的数据(尾部最短删除)
echo ${var1%hel*}
-&gt;hello world

# 删除匹配规则为hel*的数据(尾部最长删除)
echo ${var1%%hel*}
-&gt;

# 替换第一个旧字符串world为Beijing
echo ${var1/world/Beijing}
-&gt;hello Beijing hello world

# 替换第一个旧字符串world为Beijing
echo ${var1/world/Beijing}
-&gt;hello Beijing hello Beijing

</pre>
</div>
<h2>变量测试<br>
</h2>
<p>
<table>
    <tbody>
        <tr>
            <td>变量置换方式</td>
            <td>变量y没有设置</td>
            <td>变量y为空值</td>
            <td>变量y设置值</td>
        </tr>
        <tr>
            <td>x=${y-新值}</td>
            <td>x=新值</td>
            <td>x为空</td>
            <td>x=$y</td>
        </tr>
        <tr>
            <td>x=${y:-新值}</td>
            <td>x=新值</td>
            <td>x新值</td>
            <td>x=$y</td>
        </tr>
        <tr>
            <td>x=${y+新值}</td>
            <td>x为空</td>
            <td>x=新值</td>
            <td>x=新值</td>
        </tr>
        <tr>
            <td>x=${y:+新值}</td>
            <td>x为空</td>
            <td>x为空</td>
            <td>x=新值</td>
        </tr>
        <tr>
            <td rowspan="2">x=${y=新值}</td>
            <td>x=新值</td>
            <td>x为空</td>
            <td>x=$y</td>
        </tr>
        <tr>
            <td>y=新值</td>
            <td>y值不变</td>
            <td>y值不变</td>
        </tr>
        <tr>
            <td rowspan="2">x=${y:=新值}</td>
            <td>x=新值</td>
            <td>x=新值</td>
            <td>x=$y</td>
        </tr>
        <tr>
            <td>y=新值</td>
            <td>y=新值</td>
            <td>y值不变</td>
        </tr>
        <tr>
            <td>x=${y&#63;新值}</td>
            <td>新值输出到标准错误输出(屏幕)</td>
            <td>x为空</td>
            <td>x=$y</td>
        </tr>
        <tr>
            <td>x=${y:&#63;新值}</td>
            <td>新值输出到标准错误输出</td>
            <td>新值输出到标准错误输出</td>
            <td>x=$y</td>
        </tr>
    </tbody>
</table>
</p>
<ul>
    <li>如果大括号内没有":",则变量 y 为空或没有被设置,处理方法是不同的;如果大括号内有":",则变量 y</li>
    <li>不论是为空,还是没有被设置,处理方法是一样的;</li>
    <li>如果大括号内是"-“或”+",则在改变变量 x 的值的时候,变量 y 的值是不改变的;</li>
    <li>如果大括号内是"=",则在改变变量 x 的值的同时,变量 y 的值也会改变;</li>
    <li>如果大括号内是"&#63;",则当变量 y 不存在或为空时,会把"新值"当成报错输出到屏幕上。</li>
</ul>
<p>示例<br>
</p>
<div class="blockcode">
<pre class="brush:bash;">
# x=${y-新值}
echo ${y=$var1}
-&gt;hello world hello world

y=
echo ${y-$var1}
-&gt;

y=hello Beijing
echo ${y-$var1}
-&gt;hello Beijing

# x=${y:-新值}
echo ${y:-$var1}
-&gt;hello world hello world

y=
echo ${y:-$var1}
-&gt;hello world hello world

y=hello Beijing
echo ${y:-$var1}
-&gt;hello Beijing

# x=${y+新值}
echo ${y+$var1}
-&gt;

y=
echo ${y+$var1}
-&gt;hello world hello world

y=hello Beijing
echo ${y+var1}
-&gt;hello world hello world

# x=${y:+新值}
echo ${y:+$var1}
-&gt;

y=
echo ${y:+$var1}
-&gt;

y=hello Beijing
echo ${y:+var1}
-&gt;hello world hello world

# x=${y=新值
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP