Bash

如果沒有參數,則分配預設 var,否則將 var 視為不存在?

  • February 15, 2022

我有一個執行一些 rsync 和 rclone 命令的同步腳本。我想添加一種簡單的方法,通過傳遞“-n”開關在預設情況下以乾模式執行腳本。我遇到了這個問題,因為無論我嘗試什麼命令,都會在命令末尾看到 ’’ 並失敗。

目標是能夠在沒有任何參數的情況下執行腳本,並使其預設在命令末尾包含“-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。任何幫助是極大的讚賞!

#!/bin/sh

dir=/tmp/test

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

如果設置了變數,則變數擴展${variable+value}擴展為value。如果未設置變數,它將擴展為*空。*如果您希望擴展僅在變數設置為非空值時擴展,請使用${variable:+value}(即在上面的腳本中)。${1:+"$dir"}``value

引用自:https://unix.stackexchange.com/questions/690824