ユーザーに入力を要求し、$1、$2などの変数で入力を受け取ります。変数がnullであることを確認し、nullの場合は値を変更したいと思います。
if [ "$2" == "" ]; then
2=value
fi
でも何か抜けました。どんな提案がありますか?
答え1
このような位置パラメータの値を直接設定することはできません。
あなたできるコマンドを使用して設定しますset
が、これを行うと設定されます。みんな値($1
、、、$2
...)
例えば
$ set -- first second third fourth fifth
$ echo $1
first
$ echo $2
second
$2
これで、文字列が空になる可能性がある2つのケースがあります。 1つ目は値が渡されない場合、2つ目は実際のパラメータとして渡される場合であるため、まだ等がある可能性が""
あります。$3
$4
各ケースを少し複雑な方法で処理できます。
#!/bin/bash
echo Before 1=$1 2=$2 3=$3 4=$4
if [ -z "$2" ]
then
first=$1
shift 2
set -- "$first" value "$@"
fi
echo After 1=$1 2=$2 3=$3 4=$4
テストのビットは、if
他のすべての値が保存されていることを確認します。
例えば
% ./testing arg1 "" "arg 3" "and arg 4"
Before 1=arg1 2= 3=arg 3 4=and arg 4
After 1=arg1 2=value 3=arg 3 4=and arg 4
ただし、おそらくより簡単なタスクを実行し、パラメータのオーバーライドを心配する必要がないように設定されていない場合は、評価を使用できます${2:-value}
。value
$2
答え2
努力する
if [ -z "$2" ]; then
set "$1" value
fi
- 人のテストを参照してください(代替案は次のとおりです。
[ "x$2" == x ]
- 位置パラメータを設定します。場所を2番目のパラメーターにし、最初のパラメーターとして$ 1を呼び出す必要があります。