while read 行ループの中に、この変数の展開が表示されます${line/device name:}
。自分の入力ファイルでスクリプトを実行しようとしましたが、行が出力されるだけです。
その展開が何をしているのか教えてもらえますか?
while read 行ループの中に、この変数の展開が表示されます${line/device name:}
。自分の入力ファイルでスクリプトを実行しようとしましたが、行が出力されるだけです。
その展開が何をしているのか教えてもらえますか?
変数名は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
$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.