スクリプトでオプションの入力を取得できるようにしたい
たとえば、現在私のスクリプトは
#!/bin/bash
somecommand foo
しかし、私はそれを言いたいと思います:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
スクリプトでオプションの入力を取得できるようにしたい
たとえば、現在私のスクリプトは
#!/bin/bash
somecommand foo
しかし、私はそれを言いたいと思います:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
回答:
デフォルト値の構文を使用できます。
somecommand ${1:-foo}
上記は、Bashリファレンスマニュアル-3.5.3シェルパラメータの展開で説明されているように[強調]
パラメータが設定されていないかnullの場合、単語の展開が置換されます。それ以外の場合は、パラメーターの値が置き換えられます。
パラメータが設定されていない場合にのみデフォルト値を置き換えたい場合(ただし、空文字列でない場合など、nullでない場合)、代わりに次の構文を使用します。
somecommand ${1-foo}
再びから3.5.3シェルパラメータ拡大-バッシュリファレンスマニュアル:
コロンを省略すると、設定されていないパラメーターのみがテストされます。言い換えると、コロンが含まれている場合、演算子は両方のパラメーターの存在と、その値がnullではないことをテストします。コロンが省略されている場合、オペレーターは存在のみをテストします。
foo
場合は$1
設定されていないか、空の文字列」、および${1-foo}
、「リターンfoo
場合は、$1
設定されていません」。
次のように、変数のデフォルト値を設定できます。
#!/usr/bin/env bash
ARG1=${1:-foo}
ARG2=${2:-bar}
ARG3=${3:-1}
ARG4=${4:-$(date)}
echo "$ARG1"
echo "$ARG2"
echo "$ARG3"
echo "$ARG4"
これがどのように機能するかの例をいくつか示します。
$ ./somecommand.sh
foo
bar
1
Thu Mar 29 10:03:20 ADT 2018
$ ./somecommand.sh ez
ez
bar
1
Thu Mar 29 10:03:40 ADT 2018
$ ./somecommand.sh able was i
able
was
i
Thu Mar 29 10:03:54 ADT 2018
$ ./somecommand.sh "able was i"
able was i
bar
1
Thu Mar 29 10:04:01 ADT 2018
$ ./somecommand.sh "able was i" super
able was i
super
1
Thu Mar 29 10:04:10 ADT 2018
$ ./somecommand.sh "" "super duper"
foo
super duper
1
Thu Mar 29 10:05:04 ADT 2018
$ ./somecommand.sh "" "super duper" hi you
foo
super duper
hi
you
-
(それは否定のですか?)私を混同しました。
if [ ! -z $1 ]
then
: # $1 was given
else
: # $1 was not given
fi
-n
と同じ! -z
です。
-n
し! -z
て異なる結果が得られるため、ここではそうではありません。
[ -n $1 ]
常にtrueになります。bashを使用[[ -n $1 ]]
すると、期待どおりに動作します。それ以外の場合は引用する必要があります[ -n "$1" ]
変数$ 1 .. $ nの場合、置換を使用するには通常の変数に書き込む必要があることを忘れないでください。
#!/bin/bash
NOW=$1
echo ${NOW:-$(date +"%Y-%m-%d")}
DAY=${1:-$(date +%F -d "yesterday")}