Bash
如果沒有參數,則分配預設 var,否則將 var 視為不存在?
我有一個執行一些 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