パラメータがない場合はデフォルトの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

おすすめ記事