1

Как я могу сохранить разделенную строку в переменной и использовать ее в качестве параметра команды внутри сценария оболочки?

Вот что я пытаюсь сделать:

DESTINATION='/mnt/External Harddisk'
FILE_NAME=$DESTINATION/home.tar.gz
INCREMENTAL=$DESTINATION/home.snar

tar -zcvpf $FILE_NAME \
--directory=/home \
--listed-incremental=$INCREMENTAL \
--exclude=.gvfs \
--exclude=.cache* \
--exclude=*/[Cc]ache* \
--exclude=.thumbnails* \
--exclude=*/[Tt]rash* \
--exclude=*~ \
--exclude=.dropbox* \
--exclude=*.vdi \
--exclude=*VirtualBox*VMs* \
.

2 ответа2

2

этот ответ может охватывать это пробелы в переменных среды Linux?

Вы помещаете переменную среды в двойные кавычки. пример, демонстрирующий это ниже

Я делаю ls 'asdf asdf' что ls для одного файла 'adsf asdf' с пробелом в имени файла. Я хочу сделать это с переменной. Вы видите с двойными кавычками, это получает результат. Без кавычек он обрабатывает пространство как особенное и ищет файл asdf дважды. И с одинарными кавычками ls '$f' он ищет буквальный доллар f. Но с двойными кавычками ls "$f" это работает, т.е. дает тот же результат, что и ls 'asdf asdf' .

$ ls 'asdf asdf' <ENTER>
ls: cannot access asdf asdf: No such file or directory

$ export f='asdf asdf' <ENTER>

$ echo $f <ENTER>
asdf asdf

$ ls $f <ENTER>
ls: cannot access asdf: No such file or directory
ls: cannot access asdf: No such file or directory

$ echo $f <ENTER>
asdf asdf

$ ls '$f' <ENTER>
ls: cannot access $f: No such file or directory


$ ls "$f" <ENTER>
ls: cannot access asdf asdf: No such file or directory
-1

Любой символ пробела ставится перед строкой Escape, поэтому пробел будет в строке как '\' (обратный слеш + пробел). Надеюсь, это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .