Вы можете в основном использовать его в любое время, вы хотите «вводить» переменные среды, переданные в скрипт оболочки (в качестве аргументов), как если бы они были установлены в окружающей среде через экспорт
, Но без необходимости навсегда проживать их в в списке
, прежде чем запустить команды.
Примечание: Также есть длинная форма коммутатора -k
, SET -O ключевое слово
.
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
Теперь, если I SET -K
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
, но если я просто должен был запустить вышеупомянутый скрипт:
$ ./cmd1.bash
$
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
Так что, если мы должны были добавить Экспорт | GREP VAR
к нашему сценарию, как так:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
, и мы снова провели наши вышеуказанные тесты:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
, но без SET -K
:
$ ./cmd2.bash
$
SO SET -K
позволяет нам временно экспортные переменные в массу.
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
, когда мы устанавливаем несколько переменных, которые они все экспортируются:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
№ --k
делает очень явную вещь здесь. Это только экспортирующие переменные, которые были включены в командную строку, когда была выполнена команда.
Скажем, я установил эту переменную:
$ VARCMD1="hi"
Теперь, когда мы запускаем ту же команду varcmd1 = "hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
Я нашел Этот источник, который немного объясняет эту функцию, под названием: «Строки назначения параметров ключевых слов». Примечание: У URL-адрес источника используются IP-адрес, поэтому я не могу ссылаться на него прямо здесь на SE.
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
При программировании на любом языке переменная и его значение прохождения имеют решающее значение для написания надежного кода. Рядом с целочисленными и вариальными типами Array все другие переменные оболочки принимают строки в качестве их значений. Говоря о языке программирования Shell,Чтобы быть последовательным, мы предпочитаем фразу «параметр ключевых слов». Вот несколько очков, которые необходимо осмотреть при назначении значений параметрам ключевых слов:
, чтобы избежать любого неожиданного эффекта, всегда поместите подстроку назначения параметров перед командной строкой.
В оболочке B назначенные значения параметров ключевых слов будут сохраняться в (локальных) переменных оболочки. В Bash и KSH присвоенные строки параметра ключевых слов предыдущие команды не будут сохранены в переменных оболочки. Они влияют только на непосредственную раздумку подпроцесс для выполнения текущей команды. Линейка параметров параметров ключевых параметров в одиночку не работает в (локальные) переменные оболочки. Строки назначения параметров ключевых слов также могут отображаться как аргументы с псевдонимами, объявлению, наборами, экспортами, чтенно и локальными встроителями. [Раздел 3.4 Рукового руководства Bash]
Строки назначения параметров ключевых слов будут рассматриваться как аргументы для выполнения команды, если они размещаются после имени команды.
- Параметры ключевых слов могут быть манипулированы командой set.
Лучше всего выполнить MD5-хэш на всех файлах перед резервным копированием, а затем выполнить восстановление и проверить MD5-хэши на соответствие им.
dd if=imagefile.img of=/dev/sda1 bs=4M
Вы даже можете попробовать 16M или больше. Просто не забывайте время от времени проверять MD5 хэши.
Несоответствие данных может быть вызвано множеством различных вещей, я сомневаюсь, что сама опция BS вызовет их, обычно это зависит от того, что машина делает во время резервного копирования, что может привести к несовместимости данных.