シェルで入力変数に値を割り当てる方法

シェルで入力変数に値を割り当てる方法

ユーザーに入力を要求し、$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を呼び出す必要があります。

関連情報