The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Не подставляется переменная в команде case"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Не подставляется переменная в команде case"
Сообщение от WaprOld emailИскать по авторуВ закладки(??) on 22-Июн-04, 02:37  (MSK)
В таком примере:
EXTS="mp3|wav"
ext="mp3"
case $ext in ( $EXTS )
echo "FOUND!"
;;
esac

Но если написать так:
ext="mp3"
case $ext in ( mp3|wav )
echo "FOUND!"
;;
esac
то работает.

Где я не прав?
Или может быть есть другой столь-же изящный способ проверки (только без циклов)?

PS: Разумеется расширений будет не 2, это только пример.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Не подставляется переменная в команде case"
Сообщение от ACCA Искать по авторуВ закладки(ok) on 23-Июн-04, 03:09  (MSK)
>Где я не прав?

IMHO сам case не способен распознавать `|', этот символ управляет парсером sh, который уже закончил свою работу к моменту подстановки значений переменных.


> Или может быть есть другой столь-же изящный способ проверки (только без
> циклов)?

EXTS="mp3|wav"
ext="mp3"
cat <<EOM|sh
  case $ext in
   $EXTS) echo "FOUND!"  ;;
  esac
EOM


или так:

EXTS="mp3|wav"
ext="mp3"
echo $EXTS | grep -q $ext && echo Found!

В этом случае ты можешь взять свой список из файла.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Не подставляется переменная в команде case"
Сообщение от WaprOld emailИскать по авторуВ закладки(ok) on 23-Июн-04, 03:49  (MSK)
>>Где я не прав?
>
>IMHO сам case не способен распознавать `|', этот символ управляет парсером sh,
>который уже закончил свою работу к моменту подстановки значений переменных.
>
Не понял :( Какой парсер, если переменная EXTS действительно получает указанное значение и его можно вывести через echo. Никаких каналов при этом не образуется, это именно строка и если её писать прямо в case-е, оно ведь работает. Не думаю, что при этом происходит какая-то внешняя по отношению к case работа с ней.

>> Или может быть есть другой столь-же изящный способ проверки (только без
>> циклов)?
>
>EXTS="mp3|wav"
>ext="mp3"
>cat <<EOM|sh
>  case $ext in
>   $EXTS) echo "FOUND!"  ;;
>  esac
>EOM
Что это там за знак такой?

>
>или так:
>
>EXTS="mp3|wav"
>ext="mp3"
>echo $EXTS | grep -q $ext && echo Found!
>
>В этом случае ты можешь взять свой список из файла.
Да мне не файл, мне в каталоге надо найти все файлы с указанными расширениями, ну и потом обработать найденное. Т.е. сейчас это работает в таком контексте:

for song in ${album}/* ; do                     # для всех файлов альбома
  name_song=${song%.*}
  ext_song=${song:${#name_song}+1}
   case $ext_song in ( mp3|wav|mod|mid|wma|it|s3m|mo3|xm|stm|669|mtm|stm )
     echo "${win_path}${isp//\//\\}\\${song//\//\\}" >>$global_list
     ;;
   esac
done # закончили с альбомом

а поскольку количество файлов ОЧЕНЬ большое, не хотелось связываться с циклами проверки и вызовами внешних программ, хотя с другой стороны ещё придётся кодировку менять для винды... :(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Не подставляется переменная в команде case"
Сообщение от vnp emailИскать по авторуВ закладки on 23-Июн-04, 06:01  (MSK)
Просто беда какая-то. Работает у меня ващ пример. Да и с чего бы ему не работать?

>В таком примере:
>EXTS="mp3|wav"
>ext="mp3"
>case $ext in ( $EXTS )
> echo "FOUND!"
> ;;
>esac
>
>Но если написать так:
>ext="mp3"
>case $ext in ( mp3|wav )
> echo "FOUND!"
> ;;
>esac
>то работает.
>
>Где я не прав?
>Или может быть есть другой столь-же изящный способ проверки (только без циклов)?
>
>
>PS: Разумеется расширений будет не 2, это только пример.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Не подставляется переменная в команде case"
Сообщение от WaprOld emailИскать по авторуВ закладки(ok) on 23-Июн-04, 13:32  (MSK)
>Просто беда какая-то. Работает у меня ващ пример. Да и с чего
>бы ему не работать?
>
>>В таком примере:
>>EXTS="mp3|wav"
>>ext="mp3"
>>case $ext in ( $EXTS )
>> echo "FOUND!"
>> ;;
>>esac

Вот с этого места поподробнее. Может у нас шеллы разные? Вот мой:
GNU bash, version 2.05.0(1)-release (i386-slackware-linux-gnu)
Copyright 2000 Free Software Foundation, Inc.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру