Практическое использование 'набора-k' опция в ударе

Оба date -r и этот аромат stat конкретный GNU. Возможно, Вам сказал их пользователь Linux, и Вы используете другую систему.

К сожалению, нет никакой стандартной команды для получения той информации надежно. Самое портативное, которое Вы могли получить, будет:

modDate=$(perl -MPOSIX -le '@s=stat shift or die$!;
  print strftime "%Y-%m-%d", localtime $s[9]' -- "$1") || exit

zsh имеет его собственное встроенное stat команда:

zmodload zsh/stat
zstat -F %F +mtime -- "$1"

(те две команды выше, для символьных ссылок, возвратили бы время изменения цели символьной ссылки как GNU date -r был бы, если Вы хотите время символьной ссылки (как в Вас GNU stat команда), изменение stat кому: lstat в perl решение, или добавляют -L кому: zstat).

Кроме того, Вы забыли двойные кавычки вокруг своих переменных, и Вы не должны использовать echo для произвольных данных.

16
24.04.2014, 03:14
2 ответа

Любое практическое использование набора -k, скорее всего, только в личном стиле. Некоторые - возможно, те, кому нравятся языки программирования, предлагающие возможность использования аргументов по ключевым словам при вызове функций, или те немногие, кому нравится синтаксис команды dd - могут предпочесть

set -k
...
command var1=val1 var2=val2

-

var1=val1 var2=val2 command

. Фактическая причина существования опции в некоторых shell'ах объясняется в обосновании команды set в POSIX стандарте:

The following set flags were omitted intentionally with the following rationale:

The -k flag was originally added by the author of the Bourne shell to make it easier
for users of pre-release versions of the shell. In early versions of the Bourne shell
the construct
    set name=value
had to be used to assign values to shell variables.
8
27.01.2020, 19:48

Вы можете в основном использовать его в любое время, вы хотите «вводить» переменные среды, переданные в скрипт оболочки (в качестве аргументов), как если бы они были установлены в окружающей среде через экспорт , Но без необходимости навсегда проживать их в в списке , прежде чем запустить команды.

Примечание: Также есть длинная форма коммутатора -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.
14
27.01.2020, 19:48

Теги

Похожие вопросы