스크립트가 선택적 입력을받을 수 있기를 원합니다.
예를 들어 현재 내 스크립트는
#!/bin/bash
somecommand foo
그러나 나는 그것을 말하고 싶습니다 :
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
스크립트가 선택적 입력을받을 수 있기를 원합니다.
예를 들어 현재 내 스크립트는
#!/bin/bash
somecommand foo
그러나 나는 그것을 말하고 싶습니다 :
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
답변:
기본값 구문을 사용할 수 있습니다.
somecommand ${1:-foo}
위의 내용은 Bash Reference Manual-3.5.3 Shell Parameter Expansion [emphasis mine]에 설명되어 있습니다.
매개 변수가 설정되지 않거나 null이면 단어 확장이 대체됩니다. 그렇지 않으면 매개 변수 값이 대체됩니다.
매개 변수가 설정되지 않은 경우 (기본값이 아닌 경우 (예 : 빈 문자열이 아닌 경우)) 기본값을 바꾸려면이 구문을 대신 사용하십시오.
somecommand ${1-foo}
Bash Reference Manual-3.5.3 에서 다시 셸 매개 변수 확장 :
콜론을 생략하면 설정되지 않은 매개 변수에 대해서만 테스트가 수행됩니다. 다시 말해, 콜론이 포함되면 연산자는 매개 변수의 존재 여부와 그 값이 널이 아닌지 테스트합니다. 콜론이 생략되면 연산자는 존재 여부 만 테스트합니다.
foo
경우 $1
설정 해제 또는 빈 문자열 "및 ${1-foo}
"반환 foo
하는 경우이 $1
설정되지."
다음과 같이 변수의 기본값을 설정할 수 있습니다.
#!/usr/bin/env bash
ARG1=${1:-foo}
ARG2=${2:-bar}
ARG3=${3:-1}
ARG4=${4:-$(date)}
echo "$ARG1"
echo "$ARG2"
echo "$ARG3"
echo "$ARG4"
작동 방식의 예는 다음과 같습니다.
$ ./somecommand.sh
foo
bar
1
Thu Mar 29 10:03:20 ADT 2018
$ ./somecommand.sh ez
ez
bar
1
Thu Mar 29 10:03:40 ADT 2018
$ ./somecommand.sh able was i
able
was
i
Thu Mar 29 10:03:54 ADT 2018
$ ./somecommand.sh "able was i"
able was i
bar
1
Thu Mar 29 10:04:01 ADT 2018
$ ./somecommand.sh "able was i" super
able was i
super
1
Thu Mar 29 10:04:10 ADT 2018
$ ./somecommand.sh "" "super duper"
foo
super duper
1
Thu Mar 29 10:05:04 ADT 2018
$ ./somecommand.sh "" "super duper" hi you
foo
super duper
hi
you
-
(는 부정입니까?) 저를 혼동.
if [ ! -z $1 ]
then
: # $1 was given
else
: # $1 was not given
fi
-n
와 동일합니다 ! -z
.
-n
와 ! -z
내가 그 여기 경우가 아니라 말할 것 때문에.
[ -n $1 ]
항상 true 입니다. bash를 사용 [[ -n $1 ]]
하면 예상대로 동작합니다. 그렇지 않으면 인용해야합니다[ -n "$1" ]