The OpenNET Project / Index page

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

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

"Shell"  
Сообщение от demix (ok) on 12-Окт-06, 14:20 
Проблема: создаю папку, имя которой содержит пробел ( mkdir aaa\ bbb ). Непосредственно  перейти в папку не проблема ( cd aaa\ bbb -работает ), но VAR="aaa\ bbb", cd $VAR - не работает, говорит что каталог aaa\ не найден! Причем ни "$VAR",  ни ${VAR}, ни "${VAR}" не помогает....
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

  • Shell, newser, 16:34 , 12-Окт-06, (1)  
    • Shell, demix, 08:48 , 16-Окт-06, (2)  
      • Shell, newser, 09:17 , 16-Окт-06, (3)  
        • Shell, demix, 10:00 , 16-Окт-06, (4)  
          • Shell, madskull, 15:38 , 16-Окт-06, (5)  
            • Shell, demix, 08:39 , 17-Окт-06, (6)  

Сообщения по теме [Сортировка по времени, UBB]


1. "Shell"  
Сообщение от newser (??) on 12-Окт-06, 16:34 
>Проблема: создаю папку, имя которой содержит пробел ( mkdir aaa\ bbb ).
>Непосредственно  перейти в папку не проблема ( cd aaa\ bbb
>-работает ), но VAR="aaa\ bbb", cd $VAR - не работает, говорит
>что каталог aaa\ не найден! Причем ни "$VAR",  ни ${VAR},
>ни "${VAR}" не помогает....

А смысл кавычек Вам известен? И смысл экранирующей косой черты? Об этом написано в мане по shell. Вкратце: если в имени файла/каталога есть пробел (как в Вашем случае), то экранировать этот пробел можно либо при помощи обратной косой черты, либо при помощи кавычек, причем как правило как одиночных, так и двойных (в чем различие использования одних от других оставляю для самостоятельного изучения).

Т.е. создать каталог можно одним из способов:

mkdir aaa\ bbb
mkdir "aaa bbb"
mkdir 'aaa bbb'

Теперь переменная. Ее можно задать аналогично:

VAR=aaa\ bbb
VAR="aaa bbb"
VAR='aaa bbb'

Использование же переменной лучше (в данном случае) осуществлять с помощью двойных кавычек, т.е.

cd "$VAR"
или
cd "${VAR}"

Почему так - описано в документации по shell.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Shell"  
Сообщение от demix (ok) on 16-Окт-06, 08:48 
>>Проблема: создаю папку, имя которой содержит пробел ( mkdir aaa\ bbb ).
>>Непосредственно  перейти в папку не проблема ( cd aaa\ bbb
>>-работает ), но VAR="aaa\ bbb", cd $VAR - не работает, говорит
>>что каталог aaa\ не найден! Причем ни "$VAR",  ни ${VAR},
>>ни "${VAR}" не помогает....
>
>А смысл кавычек Вам известен? И смысл экранирующей косой черты? Об этом
>написано в мане по shell. Вкратце: если в имени файла/каталога есть
>пробел (как в Вашем случае), то экранировать этот пробел можно либо
>при помощи обратной косой черты, либо при помощи кавычек, причем как
>правило как одиночных, так и двойных (в чем различие использования одних
>от других оставляю для самостоятельного изучения).
>
>Т.е. создать каталог можно одним из способов:
>
>mkdir aaa\ bbb
>mkdir "aaa bbb"
>mkdir 'aaa bbb'
>
>Теперь переменная. Ее можно задать аналогично:
>
>VAR=aaa\ bbb
>VAR="aaa bbb"
>VAR='aaa bbb'
>
>Использование же переменной лучше (в данном случае) осуществлять с помощью двойных кавычек,
>т.е.
>
>cd "$VAR"
>или
>cd "${VAR}"
>
>Почему так - описано в документации по shell.


Признаю свои ошибки. Но на самом деле проблема не в этом.
Пусть
LIST='aaa\ bbb ccc\ ddd', где aaa bbb и ccc ddd - имена папок, каждая из которых содержит пробел в своем имени.
Теперь:
for i in $LIST
   do
       cd "$i"
       ......
       ......
       ......
       cd ..
   done

Как в этом случае обмануть пробел ??? Причем LIST может содержать имена и без пробелов. Заранее большое спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Shell"  
Сообщение от newser (??) on 16-Окт-06, 09:17 
>Признаю свои ошибки. Но на самом деле проблема не в этом.
>Пусть
>LIST='aaa\ bbb ccc\ ddd', где aaa bbb и ccc ddd - имена
>папок, каждая из которых содержит пробел в своем имени.
>Теперь:
>for i in $LIST
>   do
>       cd "$i"
>       ......
>       ......
>       ......
>       cd ..
>   done
>
>Как в этом случае обмануть пробел ??? Причем LIST может содержать имена
>и без пробелов. Заранее большое спасибо!


Чтение документации решит все Ваши вопросы...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Shell"  
Сообщение от demix (ok) on 16-Окт-06, 10:00 
>>Признаю свои ошибки. Но на самом деле проблема не в этом.
>>Пусть
>>LIST='aaa\ bbb ccc\ ddd', где aaa bbb и ccc ddd - имена
>>папок, каждая из которых содержит пробел в своем имени.
>>Теперь:
>>for i in $LIST
>>   do
>>       cd "$i"
>>       ......
>>       ......
>>       ......
>>       cd ..
>>   done
>>
>>Как в этом случае обмануть пробел ??? Причем LIST может содержать имена
>>и без пробелов. Заранее большое спасибо!
>
>
>Чтение документации решит все Ваши вопросы...

Исчерпывающий ответ...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Shell"  
Сообщение от madskull (ok) on 16-Окт-06, 15:38 
Один из вариантов - воспользоваться массивом и примерно таким алгоритмом

LIST=("a b" "c d")
for ((i=0; $i<${#LIST[@]}; i++)); do
    echo "<${LIST[$i]}>"
done

Другой - заменить разделитель полей

LIST="a b,c d"
IFS=','
for i in $LIST; do
    echo "<$i>"
done


А вообще, возможно, решение еще проще, если знать, откуда берется список.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Shell"  
Сообщение от demix (ok) on 17-Окт-06, 08:39 
>Один из вариантов - воспользоваться массивом и примерно таким алгоритмом
>
>LIST=("a b" "c d")
>for ((i=0; $i<${#LIST[@]}; i++)); do
>    echo "<${LIST[$i]}>"
>done
>
>Другой - заменить разделитель полей
>
>LIST="a b,c d"
>IFS=','
>for i in $LIST; do
>    echo "<$i>"
>done
>
>
>А вообще, возможно, решение еще проще, если знать, откуда берется список.


Огромное спасибо! С IFS вариант нессомненно превосходнее.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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