![매개변수가 없으면 기본 var를 할당하고, 그렇지 않으면 var가 존재하지 않는 것으로 처리하시겠습니까?](https://linux55.com/image/202504/%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%EC%97%86%EC%9C%BC%EB%A9%B4%20%EA%B8%B0%EB%B3%B8%20var%EB%A5%BC%20%ED%95%A0%EB%8B%B9%ED%95%98%EA%B3%A0%2C%20%EA%B7%B8%EB%A0%87%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A9%B4%20var%EA%B0%80%20%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%83%EC%9C%BC%EB%A1%9C%20%EC%B2%98%EB%A6%AC%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
일부 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