Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する へ行く。
- 1 (2013-10-17 (木) 22:06:24)
- 2 (2013-10-17 (木) 22:09:43)
Linux:シェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出する †
これは便利です!
実は簡単にシェルスクリプトでパス文字列からファイル名/ディレクトリ名を抽出できます。
サンプルは以下のとおり。
まず、サンプルのファイルのフルパスを変数に入れます。
# 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
おお!できた!
解説 †
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.