文字列(String)





結合


SYNTAX var=$var1$var2 DESC 文字列を連結する
a=aaa; b=bbb; c=$a$b # aaabbb echo $a$b echo $c



行間を結合


DESC
# SPACE はいらない var="aaa"\ "bbb"\ "ccc"\



部分文字列(Substring)


部分文字列を取得するには特殊な変数展開をつかう SYNTAX ${var:offeset:length}
# 234567 var=0123456789 echo ${var:2:6} # length を指定しないと 2 番目から最後まで # echo ${var:2}
sub=$(expr substr "$str" 2 3) # bcd sub=$(echo "$str" | cut -c2-4) # bcd sub=$(echo "$str" | cut -c-4) # abcd # 4 文字目 (3番目) 以降を切り出し sub=$(echo "$str" | cut -c4-) # defg



変数展開


DESC 特殊な変数展開を利用することで、文字列操作として使える。


パターンマッチ(PatternMatch) . StringMatch MatchString


path=d:/foo/bar.flv if [[ $path = *.flv ]]; then echo '$path begins with "flv"' else echo "false" fi
regexp による検索
str='hoge.c' pattern='[a-zA-Z0-9]\+\.[a-zA-Z0-9]\+' if expr "$str" : "$pattern" >/dev/null 2>&1; then echo "match" fi



置換(replace)


POINT 変数展開を使うことで、文字列置換ができる。 SYNTAX ${var/pattern/replace} ${var//pattern/replace} DESC pattern にマッチした文字列を replace に置き換える。 pattern には * ? といったワイルドカードが利用できる。 regexp を利用するには, sed, perl を利用する。 $変数名 又は ${変数名} その値 ${var:-文字列} 変数が存在し空でなければその値、それ以外なら文字列 ${var:=文字列} 変数が存在し空でなければその値、それ以外なら変数に文字列を設定 ${var:?文字列} 変数が存在し空でなければその値、それ以外なら文字列を出力して終了 ${var:+文字列} 変数が存在し空でなければその文字列、それ以外なら空 # 部分文字列 # 指定位置〜末尾 # 指定位置〜要素数 # ${var:位置} ${var:位置:長さ} # パターンにマッチした先頭部分を削除 # 最短 ${var#パターン} # 最長 ${var##パターン}
v=d:/foo/bar/goo.txt echo ${v#*/} # filename echo ${v##*/}
# 後ろからマッチした部分を消す # 最短 ${var%パターン} # 最長 ${var%%パターン}
v=d:/foo/bar/goo.txt echo ${v%/*}
# マッチ文字列を置換 # 最初にマッチした部分のみ ${var/パターン/文字列} # すべてのマッチ文字列 ${var//パターン/文字列}
path="d:/test.tmp" # d:/test.flv ${path/.tmp/.flv}
# すべてを置換するには // とする path=d:/foo/a.txt # d:fooa.txt ${path//\//}
# 2番目から6個をえる var=0123456789 echo ${var:2:6} WARNING # wildcard で指定する ( regexp ではない ) # htm var="foo.htm"; echo ${var#*.} # foo v="foo.htm"; echo ${v%*.htm} # 途中のみは消せない # # aaabbbccc var=aaabbbccc echo ${var#bbb} # 頭から消す # # ccc var=aaabbbccc echo ${var#???bbb} # aaa_ccc var=aaabbbcccbbbccc echo ${var/bbb/_} # aaa_ccc_ccc var=aaabbbcccbbbccc echo ${var//bbb/_}