シェルにおける「:-」の使い方と利点

シェルにおける「:-」の使い方と利点

korn シェルスクリプトで次の行が見つかりました。

var=${var:-/temp}

何をしているのかわかりました。

$ var=/data
$ var=${var:-/temp}
$ echo $var
/data
$ var=
$ echo $var

$ var=${var:-/temp}
$ echo $var
/temp

値を確認して割り当てるよりも利点はありますか?

ベストアンサー1

2つのコマンド(例[[ -z $var ]] && var=/temp:)または複雑なコマンド(例:

if [[ -z $var ]]
then
    var=/temp
fi

さらに、変数に条件付き値を割り当てる必要もありません。例えば、

#!/bin/sh
prog="$1"
# Do sanity checks & input validation here.
cc "$prog" -o "${2:-$(basename "$prog")}"

呼び出されると、コンパイルされた出力をcomp foo.cコンパイルして作成します。ただし、コンパイルされた出力をコンパイルして作成します。foo.cfoocomp foo.c fufoo.cfu

これは、デフォルト値で複数のパラメータを使用する場合に特に重要です。

いくつかのコマンド${1:-デフォルト値1${2:-デフォルト値2${3:-デフォルト値3${4:-デフォルト値4${5:-デフォルト値5} ${6:-デフォルト6${7:-デフォルト値7${8:-デフォルト値8${9:-デフォルト値9}

逆に、パラメータを設定するには約18のコマンドが必要です。

変数に条件付き値を割り当てることなくこの機能を使用する方法の別の例は、ユーザーがファイルを編集できるようにするスクリプトです。

#!/bin/sh
ファイル=
"$(編集者:-vi}" "$file"

ユーザーが好むエディタ(EDITOR環境変数で指定)を呼び出すか、viユーザーがエディタを指定していない場合に呼び出します。

おすすめ記事