狠狠撸

狠狠撸Share a Scribd company logo
#ssmjp 2013.09.25.
@th0x0472
MAN OF BASH
INTO DEEPNESS
祝!Sphinx本発売
http://www.oreilly.co.jp/books/9784873116488/
サマリー。
最近たくさんシェルスクリプト書いた。
bashのmanを読んだ。
イロイロできるじゃん、すげー!
というわけで、manで調べたこと、試したことを
整理してシェアしますよ。
ディープと感じるかどうかは
個人差があります。
ディープと感じるかどうかは
個人差があります。
大事なことなので2回言います。
正直、色々できすぎて
おなかいっぱい。
今回は変数展開。
「今回は」といいましたが、
次回があるかは僕の検証能力次第です。
コマンドラインの操作をラクにするアレコレもありません。
まずはおさらい
% cat ./example0.sh
#!/bin/bash -x
VAR="bar"
echo ${VAR}
echo $VAR
実行すると
./example0.sh
+ VAR=bar
+ echo bar
bar
+ echo bar
bar
${VAR}
このとき、変数名のあとに
記号+アルファ付けるとイロイロできます。
Use Default Values.
word に指定した値がデフォルト値になる。
parameter に値が代入されていれば、
その値が使われる。
parameter になにも代入されていなければ、
デフォルト値が使われる。
parameter に word は代入されない。
${parameter:-word}
${parameter:-word}
#!/bin/bash -x
echo ${VAR}
echo ${VAR:-"foo"}
echo ${VAR}
VAR="bar"
echo ${VAR}
+ echo
+ echo foo
foo
+ echo
+ VAR=bar
+ echo bar
bar
${parameter:=word}
デフォルト値を代入する。
wordに指定した値がデフォルト値になる。
parameter に値が代入されていれば、
その値が使われる。
parameter になにも代入されていなければ、
デフォルト値が使われる。
parameter に word は代入される。
${parameter:=word}
#!/bin/bash -x
echo ${VAR}
echo ${VAR:="foo"}
echo ${VAR}
VAR="bar"
echo ${VAR}
+ echo
+ echo foo
foo
+ echo foo
foo
+ VAR=bar
+ echo bar
bar
使ってみる(スクリプト)
% cat example1.sh
#!/bin/bash -x
PARAM1=${1:-"Default Value"}
echo ${PARAM1}
使ってみる (実行結果)
% ./example1.sh
+ PARAM1='Default Value'
+ echo Default Value
Default Value
% ./example1.sh "foo bar"
+ PARAM1='foo bar'
+ echo foo bar
foo bar
${parameter:?word}
値が代入されていなければ、エラーになって
スクリプトがそこで終了する。
このとき word に指定した文が出力される。
リターンコードは1でした。
${parameter:?word}
#!/bin/bash -x
VAR="ABC"
echo ${VAR:?"error."}
+ VAR=ABC
+ echo ABC
ABC
${parameter:?word}
#!/bin/bash -x
VAR=""
echo ${VAR:?"error."}
+ VAR=
./example4.sh: line 4:
VAR: error.
使ってみる(スクリプト)
% cat ./example2.sh
#!/bin/bash -x
PARAM1=${1:?"何か引数を指定してよ"}
echo ${PARAM1}
使ってみる (実行結果)
% ./example2.sh "foo bar"
+ PARAM1='foo bar'
+ echo foo bar
foo bar
% ./example2.sh
./example2.sh: line 2: 1: 何か引数を指定してよ
% echo $?
1
${parameter:+word}
Use Alternate Value.
word に指定した値が Alternate Value になる。
parameter に値が代入されていれば、
Alternate Value が使われる。
parameter になにも代入されていなければ、
からっぽのまま。
parameter に word は代入されない。
${parameter:+word}
#!/bin/bash -x
VAR="foo"
echo ${VAR}
echo ${VAR:+"bar"}
echo ${VAR}
+ VAR=foo
+ echo foo
foo
+ echo bar
bar
+ echo foo
${parameter:+word}
#!/bin/bash -x
echo ${VAR}
echo ${VAR:+"bar"}
VAR="foo"
echo ${VAR}
+ echo
+ echo
+ VAR=foo
+ echo foo
foo
${parameter:offset}
${parameter:offset:length}
offset から{末尾まで,lengthだけ}切り出す。
parameter の値は変更されない。
offset のカウントは0から始まる。
offset が文字列長より大きいとからっぽになる。
offset に負の値を指定するとスルーされる。
${parameter:offset}
#!/bin/bash -x
VAR="1234"
echo ${VAR:2}
+ VAR=1234
+ echo 34
34
${parameter:offset:length}
#!/bin/bash -x
VAR="1234"
echo ${VAR:1:2}
+ VAR=1234
+ echo 23
23
${parameter:offset:length}
#!/bin/bash -x
VAR="にほんご"
echo ${VAR:1:2}
+ VAR=$'?201??
201??202223?
201224'
+ echo $'?201??
202223'
ほん
${parameter:offset} は
echo ${VAR} | cut -c N- を置き換えられる。
${parameter:offset:length} は
echo ${VAR} | cut -c N-M を置き換えられる。
${parameter:offset}
${parameter:offset:length}
${parameter:offset}
#!/bin/bash -x
VAR="01234567"
echo ${VAR:4}
echo ${VAR} | cut -c 5-
+ VAR=01234567
+ echo 4567
4567
+ echo 01234567
+ cut -c 5-
4567
${parameter:offset:length}
#!/bin/bash -x
VAR="01234567"
echo ${VAR:2:2}
echo ${VAR} | cut -c 3-4
+ VAR=01234567
+ echo 23
23
+ echo 01234567
+ cut -c 3-4
23
${#parameter}
parameterに代入されている値の長さが返される。
${#parameter}
#!/bin/bash -x
VAR_E="English"
echo ${#VAR_E}
VAR_J="にほんご"
echo ${#VAR_J}
+ VAR_E=English
+ echo 7
7
+ VAR_J=$'?201??
201??202223?
201224'
+ echo 4
4
スクリプト
#!/bin/bash -x
VAR="0123456789"
echo ${VAR:$((${#VAR} - 5)):2}
実行結果
+ VAR=0123456789
+ echo 56
56
入れ子もOK!
楽しくなってくるけど
やり過ぎに注意。
${VAR:$((${#VAR}-5)):2}
${#VAR} → VAR の長さ = 10
$((${#VAR} - 5)) = 10 - 5 = 5
${VAR:$((${#VAR} - 5)):2} = ${VAR:5:2}
VAR=”01234567890”
offset 5 の位置の文字は、5。
そこから length=2 で、 56 が切り出される。
ご利用は計画的に。
${parameter#word}
${parameter%word}
parameter の{先頭,末尾}でwordにマッチした
部分を削除した値を返す。
# → 先頭
% → 末尾
${parameter#word}
#!/bin/bash -x
VAR="0123456789"
echo ${VAR#012}
+ VAR=0123456789
+ echo 3456789
3456789
${parameter%word}
#!/bin/bash -x
VAR="0123456789"
echo ${VAR%789}
+ VAR=0123456789
+ echo 0123456
0123456
合わせ技は失敗
#!/bin/bash -x
VAR="0123456789"
echo $
{VAR#123%789}
+ VAR=0123456789
+ echo 0123456789
0123456789
リベンジ???失敗。
#!/bin/bash -x
VAR="0123%7894567
89"
echo $
{VAR#123%789}
+
VAR=0123%789456789
+ echo
0123%789456789
0123%789456789
実は???
${parameter##word}
${parameter%%word}
もあるんだけど????
正直、違いが分かりませんでした。
教えてエライ人。
${parameter#word} , ${parameter%word}
manによれば、この二つは、shortest match
${parameter##word} , ${parameter%%word}
manによれば、 この二つは、longest match
何となく意味は分かるような、
でも違いがハッキリ分かる例を作れませんでした。
parameter のうち pattern に最初にマッチした部分
を string に置き換える。
${parameter/pattern/string}
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCDEFG"
echo ${VAR/ABC/abc}
+ VAR=ABCDEFG
+ echo abcDEFG
abcDEFG
${parameter/pattern/string}
pattern が # ではじまると、 parameter の
先頭でマッチしたとき string に置き換えられる。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCDEFG"
echo ${VAR/#ABC/abc}
echo ${VAR/#DEF/def}
echo ${VAR/DEF/def}
+ VAR=ABCDEFG
+ echo abcDEFG
abcDEFG
+ echo ABCDEFG
ABCDEFG
+ echo ABCdefG
ABCdefG
${parameter/pattern/string}
pattern が % ではじまると、 parameter の
末尾でマッチしたとき string に置き換えられる。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCDEFG"
echo ${VAR/%EFG/efg}
echo ${VAR/%DEF/def}
echo ${VAR/DEF/def}
+ VAR=ABCDEFG
+ echo ABCDefg
ABCDefg
+ echo ABCDEFG
ABCDEFG
+ echo ABCdefG
ABCdefG
${parameter/pattern/string}
string が空っぽだと、parameter のうち
pattern にマッチした部分が削除される。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCDEFG"
echo ${VAR/DEF}
echo ${VAR/DEF/}
+ VAR=ABCDEFG
+ echo ABCG
ABCG
+ echo ABCG
ABCG
${parameter/pattern/string}
parameter のうち pattern に最初にマッチした部分
を string に置き換える。
つまり、pattern に複数箇所マッチしても、
置き換えられるのは最初の1回だけ。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCABC"
echo ${VAR/AB/ab}
+ VAR=ABCABC
+ echo abCABC
abCABC
${parameter/pattern/string}
patternの大文字?小文字は区別される。
${parameter/pattern/string}
#!/bin/bash -x
VAR="abCABC"
echo ${VAR/AB/XY}
+ VAR=abCABC
+ echo abCXYC
abCXYC
${parameter/pattern/string}
pattern に . (ドット、ピリオド)を指定しても
任意の1文字にはならない
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCD"
echo ${VAR/./Z}
+ VAR=ABCD
+ echo ABCD
ABCD
${parameter/pattern/string}
pattern に ? を指定すると任意の1文字になる。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCD"
echo ${VAR/?/Z}
echo ${VAR/??/XY}
+ VAR=ABCD
+ echo ZBCD
ZBCD
+ echo XYCD
XYCD
${parameter/pattern/string}
pattern に * を指定すると何でもマッチする。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCD"
echo ${VAR/*/XYZ}
echo ${VAR/A*/XYZ}
echo ${VAR/B*/XYZ}
+ VAR=ABCD
+ echo XYZ
XYZ
+ echo XYZ
XYZ
+ echo AXYZ
AXYZ
${parameter/pattern/string}
pattern に [ABC] [1-9] なんかもいけた。
${parameter/pattern/string}
#!/bin/bash -x
VAR="ABCD"
echo ${VAR/[BC]/X}
+ VAR=ABCD
+ echo AXCD
AXCD
${parameter/pattern/string}
#!/bin/bash -x
VAR="0123"
echo ${VAR/[1-4]/X}
+ VAR=0123
+ echo 0X23
0X23
僕は力尽きました
しかし、変数展開だけでみても
まだ手を出せてない機能があります。
配列関連の機能とか
“変数名”に展開する機能とか
いつか踏み込んでみたいです。
おしまい。
ご静聴ありがとうございました。

More Related Content

More from th0x0472 (6)

とある監視ではまった話 #ssmjp 2014/12
とある監視ではまった話 #ssmjp 2014/12とある監視ではまった話 #ssmjp 2014/12
とある監視ではまった話 #ssmjp 2014/12
th0x0472
?
#ssmjp 2014/09 bashのちょっとした便利機能の紹介
#ssmjp 2014/09 bashのちょっとした便利機能の紹介#ssmjp 2014/09 bashのちょっとした便利機能の紹介
#ssmjp 2014/09 bashのちょっとした便利機能の紹介
th0x0472
?
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
th0x0472
?
2012/09/27 #ssmjp おうちOpenStack
2012/09/27 #ssmjp おうちOpenStack2012/09/27 #ssmjp おうちOpenStack
2012/09/27 #ssmjp おうちOpenStack
th0x0472
?
201207 ssmjp
201207 ssmjp201207 ssmjp
201207 ssmjp
th0x0472
?
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjp
th0x0472
?
とある監視ではまった話 #ssmjp 2014/12
とある監視ではまった話 #ssmjp 2014/12とある監視ではまった話 #ssmjp 2014/12
とある監視ではまった話 #ssmjp 2014/12
th0x0472
?
#ssmjp 2014/09 bashのちょっとした便利機能の紹介
#ssmjp 2014/09 bashのちょっとした便利機能の紹介#ssmjp 2014/09 bashのちょっとした便利機能の紹介
#ssmjp 2014/09 bashのちょっとした便利機能の紹介
th0x0472
?
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
th0x0472
?
2012/09/27 #ssmjp おうちOpenStack
2012/09/27 #ssmjp おうちOpenStack2012/09/27 #ssmjp おうちOpenStack
2012/09/27 #ssmjp おうちOpenStack
th0x0472
?
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjp
th0x0472
?

Recently uploaded (11)

测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?

MAN OF BASH #ssmjp 2013.09.25