Чтение с IFS=’ ‘, разделяющее один пробел, но не несколько пробелов

#bash #ifs

#bash #ifs

Вопрос:

Я пытаюсь прочитать строку в массив, используя пробел в качестве разделителя здесь я не хочу разбивать пробелы внутри одинарных кавычек или я могу использовать двойные кавычки, если я использую IFS =» (null), тогда все слова считываются в первый индекс, но это не цель.

 x="-r asdf -w test='foo      ' "
IFS=' '  read -r -a y<<<$x
echo ${y[@]}
  

Вывод:
-r asdf -w test=’foo ‘ #Пробелы исчезли.

Спасибо.

Комментарии:

1. Поэтому не используйте IFS= . Прочитайте всю строку. И разберите каждый символ во всей строке вручную.

2. затем все предложение считывается в первый индекс переменной.

3. Я не понимаю вашего комментария. Что за «предложение»? Как предложение может выполнять действие, т.Е.. «читать»? I don't want to break down the spaces inside single quote or I can use double quote Точно — напишите свой собственный анализатор, который будет обрабатывать это.

4. Извините за мою формулировку, я хочу сказать, что вся строка была прочитана в первый элемент массива, если я удалю IFS, > x=»-r asdf -w test=’foo ‘» > read -r -a y<<<$ x > echo $ {y[@]} -r asdf -w test =’foo ‘ > echo $ {y[0]} -r asdf -w test=’foo ‘ > echo ${y[1 ]}

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