bash экранирование аргументов

программирование Linux unix bash

#!/usr/local/bin/bash

#USERNAME=`doc`

i=0
declare -ax SCREENS

SOCKETS=`find /tmp/screens/S-doc -type p`

if [ -z "$SOCKETS" ]
then
exit 0
fi

for S in $SOCKETS
do
((i=$i+1))
S=`basename $S`
SCREENS[$i]=`screen -ls | grep $S | perl -e '$s=<>; $s =~ s/^\t(.*)s/$1/; $s =~ s/s/_/g; print
$s'`
done


MENU=""
for ((j=1; j<=$i; j=$j+1))
do
MENU="$MENU $j \"${SCREENS[$j]}\""
done



WHICH=`dialog --stdout --menu Select: 0 0 0 $MENU`

echo $WHICH
echo $MENU
#echo `$WHICH`
#echo ${SCREENS[$WHICH]} | sed -e 's/_(.*)$//'





MENU="$MENU $j \"${SCREENS[$j]}\""
тут формируется строка аргументов

но при запуске команды WHICH=`dialog --stdout --menu Select: 0 0 0 $MENU`

Аргументы в кавычках с пробелами не обрабатываться как один аргумент. а разделяются по пробелу. причём кавычка попадает в аргумент.
Переменная menu содержит 1 "1361.pt_-0.doc-erver (Detached)" 2 "1489.pt_-0.doc-erver (Detached)" 3 "1563.pt_-0.doc-erver (Attached)"
Должно восприниматься как 6 аргументов. А получается 9.

Как быть?

Спасибо.
Ответы:
Потому, что MENU это одна переменная. Внутри неё правила не работают. Лучше создать массив из данных для меню
MENU[0]=1
MENU[1]="1361.pt_-0.doc-erver (Detached)"
MENU[2]=2
MENU[3]="1489.pt_-0.doc-erver (Detached)"


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.