쉘에서 입력변수에 값을 할당하는 방법

쉘에서 입력변수에 값을 할당하는 방법

사용자에게 입력을 요청하고 $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이제 문자열이 비어 있을 수 있는 두 가지 경우가 있습니다 . 첫 번째는 값이 전달되지 않는 경우이고, 두 번째는 실제 매개변수로 전달되는 경우이므로 여전히 등이 ""있을 수 있습니다.$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 ]
  • 위치 매개변수를 설정합니다. 위치를 두 번째 매개변수로 하고, 첫 번째 매개변수로 $1을 호출해야 합니다.

관련 정보