Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / строка в виде массива char в SHELL. / 8 сообщений из 8, страница 1 из 1
24.04.2007, 19:36:12
    #34484705
red-butcher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
есть ли в bash возможность получать доступ к строке как к одномерному массиву char ?
т.е. что-то в этом роде - a="54321", echo $a[1]....
...
Рейтинг: 0 / 0
24.04.2007, 20:05:44
    #34484750
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
red-butcherесть ли в bash возможность получать доступ к строке как к одномерному массиву char ?
т.е. что-то в этом роде - a="54321", echo $a[1]....

bash release >= 2.X.X


huuj[3]="fuuj"
echo ${huuj[3]}



ЗЫ есть хороший гайд по bash: Advanced Bash-Scripting Guide
...
Рейтинг: 0 / 0
25.04.2007, 00:41:43
    #34484991
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
можно и в обычном Bourne Shell - например, set в переменные $1, $2 и так далее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
str="hello world"
IFS_bak=IFS
IFS="
"
set `echo $str | sed -e "s/\(.\)/\1\n/g"`
IFS=IFS_bak

echo $ 1 
...
Рейтинг: 0 / 0
25.04.2007, 01:23:14
    #34485021
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
--null--можно и в обычном Bourne Shell - например, set в переменные $1, $2 и так далее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
str="hello world"
IFS_bak=IFS
IFS="
"
set `echo $str | sed -e "s/\(.\)/\1\n/g"`
IFS=IFS_bak

echo $ 1 



ну если мыслить в контексте sh (не bash, как грил аутор) тады можно и
так:


#!/bin/sh -x

qq=0

while [ $qq -lt 10 ]
do
qq=`expr $qq + 1`
eval pfsss$qq=${qq}nah!
done

echo "pfsss1[${pfsss1}]"
...
Рейтинг: 0 / 0
25.04.2007, 01:23:51
    #34485022
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
Ося[quot --null--]можно и в обычном Bourne Shell - например, set в переменные $1, $2 и так далее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
str="hello world"
IFS_bak=IFS
IFS="
"
set `echo $str | sed -e "s/\(.\)/\1\n/g"`
IFS=IFS_bak

echo $ 1 



ну если мыслить в контексте sh (не bash, как грил аутор) тады можно и
так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#!/bin/sh -x

qq= 0 

while [ $qq -lt  10  ]
do
	qq=`expr $qq +  1 `
	eval pfsss$qq=${qq}nah!
done

echo "pfsss1[${pfsss1}]"
...
Рейтинг: 0 / 0
25.04.2007, 11:58:10
    #34485858
red-butcher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
Спасибо за помощь.
Есть вариант проще -

a=$(date '+%Y%m%d%H%M%S')
echo ${a:0:4}

Еще вопрос -
Есть задача в SHELL (GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)) - вычислить разницу в датах. Период не более 2 суток. Может есть у кого мысли в какую сторону ломиться ?
...
Рейтинг: 0 / 0
25.04.2007, 12:41:42
    #34486047
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
red-butcherСпасибо за помощь.
Есть вариант проще -

a=$(date '+%Y%m%d%H%M%S')
echo ${a:0:4}

Еще вопрос -
Есть задача в SHELL (GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)) - вычислить разницу в датах. Период не более 2 суток. Может есть у кого мысли в какую сторону ломиться ?

самое простое ИМХО, это разница между датами в формате UNIX TIMESTAMP, далее ты получаешь свои секунды, можно и с миллисекундами :)

Код: plaintext
1.
2.
3.
4.
5.
SECS_YESTERDAY= 86400 
TIME_NOW=`date +%s`
TIME_MOD=`stat -c=%Y $log|sed 's/=//g'`
TIME_DIFF=`expr ${TIME_NOW} - ${TIME_MOD}`
if [ "$TIME_DIFF" -gt "$SECS_YESTERDAY" ]
      then


вот такой есть пример (порезанный кусок скрипта) $log содержит fullpath до файлв
...
Рейтинг: 0 / 0
27.04.2007, 15:37:13
    #34493337
red-butcher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
строка в виде массива char в SHELL.
У меня версия bash -
GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)
Copyright 2000 Free Software Foundation, Inc.

Параметра %s в строке формата даты в команде date нет.
Вышел из ситуации следующим образом, учитывая что период не будет дольше 2 дней -

let "beg=(((($(date '+%j')*24)+$(date '+%H'))*60)+$(date '+%M'))*60+$(date '+%S')"
...
бла бла бла
...

let "en=(((($(date '+%j')*24)+$(date '+%H'))*60)+$(date '+%M'))*60+$(date '+%S')"
let "duration=$en-$beg"
echo "duration(sec.) "$duration

Но это не есть элегантное решение. С ключем %s было бы правильнее. Может кто знает, как получить дату в формате UNIX TIMESTAMP в Solaris 9 ?

P.S. ниже перечислены ключи, которые есть -
1. echo "w:`date +%x`." - 04/27/07
2. echo "w:`date +%c`." - Fri Apr 27 14:35:38 2007
3. echo "w:`date +%b`." - Apr
4. echo "w:`date +%m`." - 04
5. echo "w:`date +%a`." - Fri
6. echo "w:`date +%d`." - 27
7. echo "w:`date +%g`." - 07
8. echo "w:`date +%h`." - Apr
9. echo "w:`date +%j`." - 117 (Кол-во дней с начала года)
10. echo "w:`date +%k`." - 14
11. echo "w:`date +%l`." - 2
12. echo "w:`date +%w`." - 5
13. echo "w:`date +%e`." - 27
14. echo "w:`date +%r`." - :02:40:08 PM
15. echo "w:`date +%y`." - 07
16. echo "w:`date +%u`." - 5
17. echo "w:`date +%p`." - PM
18. echo "w:`date +%Z`." - MSD
19. echo "w:`date +%X`." - 14:42:51
20. echo "w:`date +%C`." - Fri Apr 27 14:43:20 MSD 2007
21. echo "w:`date +%V`." - 17
22. echo "w:`date +%B`." - April.
23. echo "w:`date +%M`." - 44
24. echo "w:`date +%A`." - Friday.
25. echo "w:`date +%S`." - 53
26. echo "w:`date +%D`." - 04/27/07
27. echo "w:`date +%G`." - 2007
28. echo "w:`date +%H`." - 14
29. echo "w:`date +%W`." - 17
30. echo "w:`date +%R`." - 14:46
31. echo "w:`date +%T`." - 14:47:12
32. echo "w:`date +%Y`." - 2007
33. echo "w:`date +%U`." - 16
34. echo "w:`date +%I`." - 02
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / строка в виде массива char в SHELL. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]