2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルの引数処理を柔軟にしたい

Last updated at Posted at 2015-05-14

久しぶりにbashネタ

追記:shiftはjavaでいうとiteratorと似てる動きをするので進んでしまったオプションは取得できない問題があったので修正

いままで引数処理で$1とかを使っていたが、このやり方では引数の順番を気にしないといけない

やりたいのはsshの-lオプションみたいに指定したい。
つまり

ssh -l hoge 127.0.0.1
ssh 127.0.0.1 -l hoge

こういう感じにどちらでも使えるもの

#!/bin/sh

#引数配列化
array=("$@")

# 引数があればシーケンスで処理。指定オプションを見つかればその次の要素で処理
if [ $# -gt 0 ]; then
    for i in `seq 0 $(($# -1))`
    do
        if [ '-l' = ${array[$i]} ]; then
            echo ${array[$i +1]}
            break
        fi
    done
fi

これを関数化すれば何個でも対応できる

前回のshift
shiftは進んでしまった引数を取得できなくなるので順次処理などでしか使えないかも。。

#!/bin/sh

for i in `seq 1 $#`
do
    echo $1
    shift
done

こんな感じの、、、
いいもの知ったとおもったけど、、まあ、そういうこともある。。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?