Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する の変更点
Top / Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する
- 追加された行はこの色です。
- 削除された行はこの色です。
- Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する へ行く。
- Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する の差分を削除
*Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する [#g1c3bf59] これは便利です! 以下のサイトを参考にやりました! -http://www.kishiro.com/FreeBSD/get_filename_in_shellscript.html 実は簡単にシェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出できます。 サンプルは以下のとおり。 まず、サンプルのファイルのフルパスを変数に入れます。 # TARGET=/etc/sysconfig/network-scripts/ifcfg-eth0 # # echo ${TARGET} /etc/sysconfig/network-scripts/ifcfg-eth0 # echoすると当然そのまま出ます。 ディレクトリ名を取り出す場合はこんな感じ。 # echo ${TARGET%/*} /etc/sysconfig/network-scripts おお!できた! 続いて、ファイル名だけ取り出す場合はこんな感じ。 # echo ${TARGET##*/} ifcfg-eth0 おお!できた! ***解説 [#m5d278be] シェルでは変数に対して${'''parameter'''''XXX''}という形式でいろいろ編集できるみたいです。 とりあえず、備忘のためにmanを貼り付けてみました。 >Parameter Expansion > The ‘$’ character introduces parameter expansion, command substitution, or arithmetic expansion. > The parameter name or symbol to be expanded may be enclosed in braces, which are optional but > serve to protect the variable to be expanded from characters immediately following it which could > be interpreted as part of the name. > > When braces are used, the matching ending brace is the first ‘}’ not escaped by a backslash or > within a quoted string, and not within an embedded arithmetic expansion, command substitution, or > parameter expansion. > > ${parameter} > The value of parameter is substituted. The braces are required when parameter is a posi- > tional parameter with more than one digit, or when parameter is followed by a character > which is not to be interpreted as part of its name. > > If the first character of parameter is an exclamation point, a level of variable indirection is > introduced. Bash uses the value of the variable formed from the rest of parameter as the name of > the variable; this variable is then expanded and that value is used in the rest of the substitu- > tion, rather than the value of parameter itself. This is known as indirect expansion. The excep- > tions to this are the expansions of ${!prefix*} and ${!name[@]} described below. The exclamation > point must immediately follow the left brace in order to introduce indirection. > > In each of the cases below, word is subject to tilde expansion, parameter expansion, command sub- > stitution, and arithmetic expansion. When not performing substring expansion, bash tests for a > parameter that is unset or null; omitting the colon results in a test only for a parameter that is > unset. > > ${parameter:-word} > Use Default Values. If parameter is unset or null, the expansion of word is substituted. > Otherwise, the value of parameter is substituted. > ${parameter:=word} > Assign Default Values. If parameter is unset or null, the expansion of word is assigned to > parameter. The value of parameter is then substituted. Positional parameters and special > parameters may not be assigned to in this way. > ${parameter:?word} > Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a > message to that effect if word is not present) is written to the standard error and the > shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted. > ${parameter:+word} > Use Alternate Value. If parameter is null or unset, nothing is substituted, otherwise the > expansion of word is substituted. > ${parameter:offset} > ${parameter:offset:length} > Substring Expansion. Expands to up to length characters of parameter starting at the char- > acter specified by offset. If length is omitted, expands to the substring of parameter > starting at the character specified by offset. length and offset are arithmetic expres- > sions (see ARITHMETIC EVALUATION below). length must evaluate to a number greater than or > equal to zero. If offset evaluates to a number less than zero, the value is used as an > offset from the end of the value of parameter. If parameter is @, the result is length > positional parameters beginning at offset. If parameter is an array name indexed by @ or > *, the result is the length members of the array beginning with ${parameter[offset]}. A > negative offset is taken relative to one greater than the maximum index of the specified > array. Note that a negative offset must be separated from the colon by at least one space > to avoid being confused with the :- expansion. Substring indexing is zero-based unless the > positional parameters are used, in which case the indexing starts at 1. > > ${!prefix*} > ${!prefix@} > Expands to the names of variables whose names begin with prefix, separated by the first > character of the IFS special variable. > > ${!name[@]} > ${!name[*]} > If name is an array variable, expands to the list of array indices (keys) assigned in name. > If name is not an array, expands to 0 if name is set and null otherwise. When @ is used > and the expansion appears within double quotes, each key expands to a separate word. > > ${#parameter} > The length in characters of the value of parameter is substituted. If parameter is * or @, > the value substituted is the number of positional parameters. If parameter is an array > name subscripted by * or @, the value substituted is the number of elements in the array. > > ${parameter#word} > ${parameter##word} > The word is expanded to produce a pattern just as in pathname expansion. If the pattern > matches the beginning of the value of parameter, then the result of the expansion is the > expanded value of parameter with the shortest matching pattern (the ‘‘#’’ case) or the > longest matching pattern (the ‘‘##’’ case) deleted. If parameter is @ or *, the pattern > removal 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 pattern > removal operation is applied to each member of the array in turn, and the expansion is the > resultant list. > > ${parameter%word} > ${parameter%%word} > The word is expanded to produce a pattern just as in pathname expansion. If the pattern > matches a trailing portion of the expanded value of parameter, then the result of the > expansion is the expanded value of parameter with the shortest matching pattern (the ‘‘%’’ > case) or the longest matching pattern (the ‘‘%%’’ case) deleted. If parameter is @ or *, > the pattern removal 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 pattern removal operation is applied to each member of the array in turn, and the > expansion is the resultant list. > > ${parameter/pattern/string} > 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 > Ipattern 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.