У меня есть следующая строка, которая отлично работает:
while getopts :t t; do case $t in t) echo $t; break; esac; done
однако, когда я пытаюсь использовать его в качестве подстановки команд, bash завершается с ошибкой.
Код:
#!/usr/bin/env bash
echo $BASH_VERSION
[ "$(while getopts :t t; do case $t in t) echo $t; break; esac; done)" = "t" ] && echo "Option specified."
Результат:
$ ./test.sh -a -b -c -t
4.3.42(1)-release
./test.sh: line 3: unexpected EOF while looking for matching `"'
./test.sh: line 4: syntax error: unexpected end of file
Обратная косая черта \)
в t)
не помогает. И синтаксис (t)
работает в GNU bash 3.2.57, но не в 4.3.42.
Кажется, что использование обратных кавычек отлично работает для обеих версий:
[ "`while getopts :t t; do case $t in t) echo $t; break; esac; done`" = "t" ] && echo "Option specified."
однако я не хочу использовать этот синтаксис, поскольку он устарел.
Как я могу использовать синтаксис case
в приведенной выше подстановке команд ($()
)?
Или, может быть, есть другой способ сделать то же самое?
В основном, чтобы проверить, был ли указан параметр -t
для сценария, и выполнить какую-либо команду, если это так.