いくつかの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