У меня есть скрипт, который использует следующую логику:
if [ ! -z "$1" ]; then # if any parameter is supplied
ACTION= # clear $ACTION
else
ACTION=echo # otherwise, set it to 'echo'
fi
Это работает нормально, как есть.Однако, читая раздел Расширение параметров оболочки руководства bash
, кажется, что это можно сделать за один шаг.Тем не менее, я не могу понять, как это сделать.
Я пробовал:
ACTION=${1:-echo} # ends up with $1 in $ACTION
ACTION=${1:+}
ACTION=${ACTION:-echo} # ends up always 'echo'
и несколько способов их вложения, но вложение, похоже, запрещенонасколько я могу судить.
Я понимаю, что у меня уже есть рабочее решение, но теперь мне искренне любопытно, возможно ли это.Это было бы просто для троичного оператора, но я не думаю, что у bash есть такой.
Если это возможно, я хотел бы увидеть логику для выполнения этого кажущегося двухэтапного процесса, снет конструкции if / else, но с использованием только любой комбинации расширений параметров оболочки функций .
Спасибо.
EDIT для elderarthis:
Остальная часть сценария просто:
find . -name "*\?[NMSD]=[AD]" -exec ${ACTION} rm -f "{}" +
Я просто хочу ACTION=echo
как проверку здравомыслия против себя, следовательно, передача любого аргумента будетна самом деле делаем удаление (обнуляя $ {ACTION}, тогда как передача аргументов без аргументов оставляет эхо там.
И я знаю TIMTOWTDI; я смотрю, чтобы увидеть, можно ли это сделать только с помощью вещи в командной консолиРаздел расширения параметров: -)
РЕДАКТИРОВАТЬ для Микеля:
$ cat honk.sh
#!/bin/bash
ACTION=${1-echo}
echo $ACTION
$ ./honk.sh
echo
$ ./honk.sh foo
foo
Последний должен иметь ACTION=''
и, таким образом, возвращать пустую строку /нулевое значение.