Вы не можете вернуться от ./mycommand.sh $MYOPT
к значению MYOPT
.Вот почему вы не нашли способ сделать это: это невозможно. mycommand.sh
не получает достаточно информации для восстановления исходного значения.
Например, если значение MYOPT
равно *
, то mycommand.sh
вызывается со списком имен файлов в текущем каталоге. У него нет возможности узнать, как был составлен этот список.
Если вы знаете, что значение MYOPT
соответствует определенным правилам, вы сможете восстановить его. Простая версия этих правил такова:
\[*?
или табуляции или новой строки. При этих предположениях "$*"
в mycommand.sh
даст вам значение MYOPT
. Но имейте в виду, что это не может работать в целом.
Правильным решением будет исправить вашу среду. На языке оболочки $MYOPT
не означает «взять значение MYOPT
», это означает «взять значение MYOPT
, разделить его в соответствии с значение IFS
и обрабатывать каждую результирующую часть как подстановочный шаблон, который расширяется, если он соответствует хотя бы одному файлу». Способ написать «взять значение MYOPT
» — это "$MYOPT"
, или, в более общем смысле, использовать $MYOPT
в двойных кавычках.
Вы не можете создать каталог с помощью touch
, используйте для этого mkdir
:
mkdir -p "$HOME"/mail/.sa-learn/{cur,new,tmp}
Флаг -p
сообщает mkdir
для создания всех промежуточных папок, если они не существуют, и не будет ошибкой попытаться создать папку, которая уже существует.
Предполагается, что оболочка выполняет расширение скобок. В противном случае разбейте его на три отдельных вызова mkdir
.
При перемещении почты (непроверенной):
find "$HOME"/mail -type f -path "*/.spam/*" -print0 |
xargs -0 -I XX mv "XX" "$HOME"/mail/.sa-learn/new/
Это позволит найти всю почту (новую или старую) в любой папке .spam
в папке $ HOME / mail
и переместить их в папку .sa-learn / new
папка.
Я использую «$ HOME»
, а не ~
в скриптах, потому что мне кажется, что он выглядит лучше, самодокументируется и ведет себя как любая другая переменная ( ~
нет).