사용자에게 입력을 요청하고 $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을 호출해야 합니다.