LINUX.ORG.RU

Bash выражения как значение переменной в скриптах

 


1

1

Не знаю как сформулировать вопрос, иначе бы наверное нагуглил.

В общем есть переменная:

DATE=$(date -d '1 hour ago' +%d/%b/%Y-%H:%m:%S)

А мне надо допустим из переменной $DATE выделить год, с помощью | cut -c 11-14 и записать уже это в другую переменную, допустим $YEAR, как это сделать?

Обе переменные используются в разных местах скрипта.

★★★

Можно просто через echo, но подождем более верные варианты.

~ $ DATE=$(date -d '1 hour ago' +%d/%b/%Y-%H:%m:%S)
~ $ echo $DATE
24/Jan/2024-13:01:07
~ $ echo $DATE | cut -c 11-14
4-13
~ $
IIIypuk ★★★★
()
Последнее исправление: IIIypuk (всего исправлений: 1)
Ответ на: комментарий от IIIypuk

Это верный вариант. Легко читается и не создаёт явного или неявного дискового I/O временными файлами. Правда, я не дофига знаток шелл-скриптинга, так что подождём :)

anonymous
()
Ответ на: комментарий от anonymous

Это частный случай, иногда можно и так сделать, а мне надо переменную $DATE потрошить на разные куски в разных местах скрипта. Зачем заводить при этом кучу однотипных переменных?

yaba ★★★
() автор топика
Ответ на: комментарий от undef

Хорошо, а если понадобиться выражение посложнее, чем просто выделение года, ну как в примере с перенаправлением потока?

yaba ★★★
() автор топика
local date  = io.popen("date -d '1 hour ago' +%d/%b/%Y-%H:%m:%S"):read('*a');

local days,mons,year,
      hour,mins,secs = date:match('(%d+)/(%S+)/(%d+)%-(%d+):(%d+):(%d+)')

print(days,mons,year,hour,mins,secs);

local cmd = {
    'VAR='..year,';','notify-send','"$VAR"',';'
}

os.execute(table.concat(cmd,' '));
anonymous
()
Ответ на: комментарий от yaba

Если понадобится посложнее - надо будет делать посложнее. А фиксированные позиции варезаются именно так.

anonymous
()

Не знаю как сформулировать вопрос, иначе бы наверное нагуглил.

2024 на дворе, Человек уже создал Скайнет и во всю использет его.
Вкалывают роботы... (c).

Если серьезно, то надо привыкать нагружать ChatGPT для своих «маленьких задач». Тем более, ему проще что-то объяснить, чем поисковику гугла.
Мой коммент, как пример, curl wttr.in не работает (комментарий).

krasnh ★★★★★
()
Ответ на: комментарий от anonymous

Ты аналог этого днища запускаешь каждый раз отрывая терминал кукарека

anonymous
()
Ответ на: комментарий от krasnh

Не нужно! Мне и в жизни этого хватает, каждый ИИ обо мне навязчиво «заботится», а я еще сам полезу к этому ИИ, упаси Аллах!

yaba ★★★
() автор топика
DATE=$(date -d '1 hour ago' '+%d/%b/%Y-%H:%m:%S@%Y')
YEAR=${DATE##*@}
DATE=${DATE%@*}
echo $YEAR $DATE
2024 24/Jan/2024-15:01:31
vodz ★★★★★
()
$ a=($(date -d '1 hour ago' +"%d %b %Y %H %m %S"))
$ echo ${a[0]}
24
$ echo ${a[1]}
Jan
$ echo ${a[2]}
2024
$ echo ${a[3]}
14
$ echo ${a[4]}
01
$ echo ${a[5]}
14
futurama ★★★★★
()
Ответ на: комментарий от yaba

Как вариант, элементы еще можно доставать awk-ом:

$ date -d '1 hour ago' '+%d/%b/%Y-%H:%m:%S@%Y' | awk -F '[/:@-]' '{print $1, $2, $3, $4, $5, $6, $7}'
24 Jan 2024 09 01 57 2024
iron ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.