![첫 번째 인수의 기본값이 명령줄의 값인 경우 두 번째 인수를 어떻게 전달합니까?](https://linux55.com/image/217123/%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%9D%B8%EC%88%98%EC%9D%98%20%EA%B8%B0%EB%B3%B8%EA%B0%92%EC%9D%B4%20%EB%AA%85%EB%A0%B9%EC%A4%84%EC%9D%98%20%EA%B0%92%EC%9D%B8%20%EA%B2%BD%EC%9A%B0%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EC%9D%B8%EC%88%98%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
cdcl() { vlog -source -lint +define+"${1:-DEBUG}" -sv "${2:-*.sv}"; }
위는 내 기능이며 .bashrc 파일에 정의했습니다. 아래는 내 명령 줄입니다
% cdcl 'RANDOM' 'abc.sv'
이것은 나에게 >>를 준다vlog -source -lint +define+RANDOM -sv abc.sv
명령줄에서 첫 번째 자리 표시자 값 제공을 건너뛰고 두 번째 자리 표시자만 제공할 수 있는 방법이 있습니까?
답변1
함수가 하나의 인수로만 호출되는지 확인하고 이 경우를 다르게 처리할 수 있습니다.
cdcl() {
if (($# == 1)); then
vlog -source -lint +define+DEBUG -sv "$1"
else
vlog -source -lint +define+"${1:-DEBUG}" -sv "${2:-*.sv}"
fi
}
답변2
함수는 콜론(예: "${1:-DEBUG}"
and not ) 을 사용한 기본 확장을 사용하므로 "${1-DEBUG}"
null 값도 기본값 사용을 트리거합니다. ""
null 값을 사용하거나 전달할 수 ''
있으므로
cdcl "" abc.sv
함수가 실행되도록 해야 합니다.
vlog -source -lint +define+DEBUG -sv abc.sv
이 기능을 사용하면 "${1-DEBUG}"
값이 설정되지 않은 경우에만 기본값이 트리거되고, 불가능할 경우 $1
값 $2
이 설정되지 않았거나 이미 정의된 경우에만 기본값이 트리거됩니다. 순서대로 이루어져야 하며 목록에 "구멍"이 있어서는 안 됩니다.
이와 같이 빈 문자열을 전달하는 것이 좋은 해결책은 아니며, 예를 들어 적절한 기본값을 사용 getopt
하여 비슷한 인수를 허용하도록 함수 내에서 사용하도록 결정할 수도 있습니다 .cdcl -d RANDOM -s abc.sv
답변3
귀하의 질문을 올바르게 이해했다면 스크립트에 첫 번째 인수 제공을 건너뛰고 이를 사용 RANDOM
하지만 입력할 필요는 없습니다. 매개변수의 순서를 복원할 수 있습니다.
cdcl() {
local f_pattern="${1:-*.sv}"
echo "vlog -source -lint +define+${2:-DEBUG} -sv $f_pattern"
# vlog -source -lint +define+"${2:-DEBUG}" -sv "$f_pattern"
}
echo
여기서는 사용할 명령과 매개변수를 인쇄하는 데 사용 합니다. 자신있으면 삭제하세요echo