매개변수가 없으면 기본 var를 할당하고, 그렇지 않으면 var가 존재하지 않는 것으로 처리하시겠습니까?

매개변수가 없으면 기본 var를 할당하고, 그렇지 않으면 var가 존재하지 않는 것으로 처리하시겠습니까?

일부 rsync 및 rclone 명령을 실행하는 동기화 스크립트가 있습니다. "-n" 스위치를 전달하여 기본적으로 건조 모드에서 스크립트를 실행하는 간단한 방법을 추가하고 싶습니다. 무엇을 시도하더라도 명령 끝에 ""가 표시되고 실패하기 때문에 문제가 발생합니다.

목표는 인수 없이 스크립트를 실행하고 기본적으로 명령 끝에 "-n"을 포함할 수 있도록 하는 것입니다. 없음. 그런 다음 마지막에 매개변수를 사용하여 실행하여 실제 동기화를 실행합니다.

간단한 예는 다음을 사용하는 것입니다 ls.

#!/usr/bin/env bash
set -x

FOLDER="/tmp/test"

ls -lha "$([ -z $1 ] || echo $FOLDER)"
./test.sh test                                                                                                                   Tue Feb 15 16:06:19 2022
+ FOLDER=/tmp/test
++ '[' -z test ']'
++ echo /tmp/test
+ ls -lha /tmp/test
./test.sh                                                                                                                            Tue Feb 15 16:05:07 2022
+ FOLDER=/tmp/test
++ '[' -z ']'
+ ls -lha ''
ls: cannot access '': No such file or directory

우리의 목표는 ls -lha ''입니다 ls -lha. 어떤 도움이라도 대단히 감사하겠습니다!

답변1

#!/bin/sh

dir=/tmp/test

ls -lha ${1+"$dir"}

변수가 설정되면 변수 확장이 ${variable+value}확장됩니다 . value그것은 확장된다아무것도 없다변수가 설정되지 않은 경우. 변수가 null이 아닌 값으로 설정된 경우에만 확장이 발생하도록 하려면 ${variable:+value}(예: 위 스크립트에서)를 사용하세요.${1:+"$dir"}value

관련 정보