Bash: Собственный способ избавиться от цитаты вокруг каждого участника массива

Решение во время выполнения

Одно решение состоит в том, чтобы спасть до tty консоли (ctrlaltF2) и работать xrandr изменить настройки дисплея к режиму клонирования. Выполните команду однажды без опций найти названия соединений. Ищите строку, которая похожа

eDP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 282mm x 165mm

Здесь соединение называют eDP1. Установите рабочий монитор для отображения того же содержания как поврежденное с чем-то как

xrandr --output eDP1 --auto --output VGA --auto --same-as eDP1

Затем можно переключиться назад на графический режим (ctrlaltF1), и дисплей должен быть клонирован.


Персистентное решение

Можно достигнуть персистентного решения путем создания xorg.conf файла с набором опции клона. Запишите следующие строки, чтобы зарегистрировать и переместить его в /etc/X11/xorg.conf.d/20-clone-mode.conf

Section "ServerLayout"
        Option "Clone" "On"
EndSection

Я не протестировал его, но если эта конфигурация завершена, мониторы должны быть клонированы в следующий раз, когда Вы загружаетесь.

4
03.04.2015, 00:50
4 ответа

Это может сработать:

in_file=./data
vector=($(./readdata.sh 0 $in_file))
for index in ${!vector[@]}
do
    echo ${vector[index]//\"/}
done

Ref: http://www.tldp.org/LDP/abs/html/refcards.html#AEN22828

4
27.01.2020, 20:48

Как вы предпочитаете один вкладыш

vector=("${vector[@]//\"/}")

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

2
27.01.2020, 20:48

Вы сделаете вашу программу проще и более надежным, если ReadData.sh производит новые данные с разделителями, без дополнительных кавычек.

В вашей текущей программе вывод readdata.sh разделен на пробел (например, «ab» приводит к двум элементам массива A и B «) и каждое полученное слово интерпретируется как шаблон подстановки (так, например, « A * B » приводит к « A , то имена файлов в Текущий каталог, и, наконец, B "). См. Почему мой скрипт Shell заслонка пробела или других специальных символов? Для более подробной информации.

Bash обеспечивает очень простой способ чтения данных Newline-deliMited: MAPFile . Поскольку Bash выполняет правую сторону трубопровода в подпункте, вы не можете просто написать ./ ReadData.sh 0 "$ In_file" | mapfile -t vector , вы должны поместить использование переменной в командном блоке, или вы можете использовать подстановку процесса:

in_file=./data
mapfile -t vector < <(./readdata.sh 0 "$in_file")
for index in "${!vector[@]}"
do
  echo "$index: ${vector[index]}"
done

, если вы не используете индексы, только элементы, более простой способ За массивом находится

for element in "${vector[@]}"
do
  echo "$element"
done
3
27.01.2020, 20:48

Если вы хотите избежать «хакерского» поиска и замены Решение, использующее eval , похоже, выполняет свою работу:

vector=( $(eval echo ${vector[@]}) )

Это заставляет оболочку интерпретировать их как цитируемые аргументы для echo , который удаляет кавычки. Конечно, в приведенной выше строке все еще есть проблемы с пробелами, но ключевым моментом здесь является идея использования eval .

1
27.01.2020, 20:48

Теги

Похожие вопросы