Оба 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
для произвольных данных.
Любое практическое использование набора -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.
Вы можете в основном использовать его в любое время, вы хотите «вводить» переменные среды, переданные в скрипт оболочки (в качестве аргументов), как если бы они были установлены в окружающей среде через экспорт
, Но без необходимости навсегда проживать их в в списке
, прежде чем запустить команды.
Примечание: Также есть длинная форма коммутатора -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.