如果没有参数,则分配默认 var,否则将 var 视为不存在?

如果没有参数,则分配默认 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。任何帮助是极大的赞赏!

答案1

#!/bin/sh

dir=/tmp/test

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

如果设置了变量,则变量扩展${variable+value}将扩展。value它扩展到没有什么如果未设置变量。如果您希望仅当变量设置为非空值时才展开扩展,请使用${variable:+value}(即在上面的脚本中)。${1:+"$dir"}value

相关内容