5

while read 行ループの中に、この変数の展開が表示されます${line/device name:}。自分の入力ファイルでスクリプトを実行しようとしましたが、行が出力されるだけです。

その展開が何をしているのか教えてもらえますか?

4

2 に答える 2

4

変数名はline. / は文字列置換用です。つまり、「デバイス名:」のどこかに存在する場合$lineは削除されます。

> line="a device name: some name"
> echo ${line/device name:}
a  some name

また、 begin と endの置換を表す#and置換も表示される場合があります。また、このような置換は bash 固有の機能であることに注意してください(たとえば、サポートされておらず、一見移植可能です)。そのため、スクリプトの先頭でハッシュバンの代わりに使用する必要があります。%line/ash%##!/bin/bash#!/bin/sh

于 2015-09-16T22:24:16.777 に答える
4

$line部分文字列device name:が削除されて返されます。bash の man ページから:

${parameter/pattern/string}
       Pattern substitution.  The pattern is expanded to produce a pattern just as in
       pathname  expansion.   Parameter  is expanded and the longest match of pattern
       against its value is replaced with string.  If  pattern  begins  with  /,  all
       matches of pattern are replaced with string.  Normally only the first match is
       replaced.  If pattern begins with #, it must match at  the  beginning  of  the
       expanded  value  of parameter.  If pattern begins with %, it must match at the
       end of the expanded value of parameter.  If string is null, matches of pattern
       are  deleted and the / following pattern may be omitted.  If parameter is @ or
       *, the substitution operation is applied to each positional parameter in turn,
       and  the  expansion  is the resultant list.  If parameter is an array variable
       subscripted with @ or *, the substitution operation is applied to each  member
       of the array in turn, and the expansion is the resultant list.
于 2015-09-16T22:26:00.533 に答える