일부 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