参考元
dockerの公式イメージ読んでたら思わぬノウハウを。
結論
if [ "${1#-}" != "$1" ]; then
コードの意味
${1#-}
なんぞやっていう。
${parameter#word} ${parameter##word} パターンに前方一致した部分を取り除く。 word が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが > parameter の値の先頭部分とマッチする場合、展開して得られる値は parameter を展開した値から最短一致パターン (
#''の場合) > または最長一致パターン (
##'' の場合) を取り除いたものになります。 parameter が @ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter が @ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
つまり
if [ "${1#-}" != "$1" ]; then
-f
が第一引数なら、 f != -f
になってif文の中が実行される
some_name
が第一引数なら、 some_name != some_name
になってif文の中が実行されない
ってお話。
日記
Dockerの勉強してたら${1#-}が読めなくて友人に助け求めたらこんな面白い発見が。
シェルスクリプトで変数展開なるものがあるらしい。
こんな感じに変数を取得する時に、中身を変えてから出力出来るんだってね。#
以外にもいろいろあるから、
今後使う時の参考にしようと思います。
とりあえず・・・今日はいっぱい勉強して疲れた・・・そして風邪が未だに治らない。