2017-01-31 9 views
1

Heyhey, , так как это мой первый пост, будьте терпеливы :) Я стараюсь изо всех сил.BASH grep result as array name

Я пытаюсь «выграбить» язык из своей системы (osx) и принять это как строковое имя, чтобы установить язык.

У меня есть несколько строк, называемых $en['a' 'b' 'c'], $de['d' 'e' 'f'] и $fr['g' 'h' 'i'] где-то ...

Я использую:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

, который дает мне значение ISO, как еп, фр, де ...

Вот моя главная проблема. Я просто не могу просто использовать ${language[*]}. Похоже, я все испробовал. Уже сделайте ошибку с {}()'' и $.

Единственное, что я узнал во время отладки language приводит

language=ISO (так это работает правильно)

и если я пытаюсь получить это значение в моей желаемой строки

echo ${language[*]} , ${language[0]} , ${language[1]} 

результаты в

ISO , ISO , 

который не является верный. Кажется, я создаю новую строку, но я хочу использовать существующие. Не знаю, какие еще ключевые слова в Google :(

+0

Что такое ввод? Какой результат вы ожидаете? – choroba

+0

Я только что заполнил некоторые данные прямо сейчас. Я ожидаю, что вывод $ {en [@]} и $ {language [@]} одинаковый. – cr4nk89

ответ

0

Все это синтаксис использования массива:

echo ${language[*]} , ${language[0]} , ${language[1]} 

Но, как вы создали переменную, это не массив, это простая переменная:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

Чтобы получить доступ к его значение, используйте просто $language, например:

echo $language 

Кроме того, трубопровод с locale, grep и cut получает первые два символа переменной LANG очень неэффективно. Вы можете получить его более эффективно использовать подстроку:

language=${LANG:0:2} 

Если вы хотите использовать массив (хотя я не вижу смысла здесь), то вы должны поставить скобки вокруг значений для назначения, например, :

language=(${LANG:0:2}) 

Этот массив в этом примере один элемент, вы можете получить доступ к его стоимости, как это:

echo ${language[0]} 

Обратите внимание, что синтаксис Bash очень строг с г для обозначения символов и пробелов каждая маленькая деталь может иметь большое значение, поэтому важно писать точно.

Вы можете вставить свои скрипты в shellcheck.net, чтобы проверить тривиальные ошибки.

Подробнее о массивах можно узнать в man bash.

+0

Должен ли я использовать синтаксис массива, если я получил строки в массивах? Вы правы, это действительно более эффективно, спасибо. Все еще не может получить доступ к моему массиву через $ language [] – cr4nk89

+0

, это будет либо массив, либо строка (вы понимаете это, верно?). Если вам действительно нужен массив, то 'language = ($ (local ..... | ....))'. Удачи. – shellter

 Смежные вопросы

  • Нет связанных вопросов^_^