我有一个运行一些 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
。任何帮助是极大的赞赏!
答案1
#!/bin/sh
dir=/tmp/test
ls -lha ${1+"$dir"}
如果设置了变量,则变量扩展${variable+value}
将扩展。value
它扩展到没有什么如果未设置变量。如果您希望仅当变量设置为非空值时才展开扩展,请使用${variable:+value}
(即在上面的脚本中)。${1:+"$dir"}
value