KSH: цикл через переменную с двойными кавычками - PullRequest
0 голосов
/ 22 января 2019

Использование KSH.У меня есть переменная, которая содержит строки, заключенные в двойные кавычки и разделенные запятыми, я хотел бы пройтись по этим строкам, я не хочу распознавать запятые в двойных кавычках как разделители.

Я пытался установитьIFS to IFS = "\", \ "" и IFS = ",", но он все равно распознает запятую в двойных кавычках.

Упрощенно:

errorStrings="Some error","Another error","This, error"
oldIFS=$IFS
IFS=","
for error in $errorStrings;do
  echo "Checking for $error"
  #grep "$error" file >/dev/null 2>&1 && echo "$error found"
  continue
done
IFS=$oldIFS


Actual:
Checking for Some error
Checking for Another error
Checking for This
Checking for  error

Expected:
Checking for Some error
Checking for Another error
Checking for This, error

1 Ответ

0 голосов
/ 22 января 2019

Первая проблема в том, что errorStrings не то, что вы ожидаете.Попробуйте

echo "e=[${errorStrings}]"

Если вы хотите использовать двойные кавычки внутри вашей строки, используйте

errorStrings='"Some error","Another error","This, error"'

Ваш скрипт будет работать лучше, когда вы цитируете $errorStrings в цикле for.

oldIFS=$IFS
IFS=","
for error in "$errorStrings";do
  echo "Checking for $error"
  #grep "$error" file >/dev/null 2>&1 && echo "$error found"
  continue
done
IFS=$oldIFS

Этот цикл еще нужно изменить, чтобы удалить кавычки.Возможно, это хороший момент для использования массива:

errorStrings=("Some error" "Another error" "This, error")
for error in "${errorStrings[@]}";do
  echo "Checking for $error"
  #grep "$error" file >/dev/null 2>&1 && echo "$error found"
  continue
done

Я не уверен, какие опции у вас есть в вашей среде, возможно, это тоже будет работать:

errorStrings='"Some error","Another error","This, error"'

echo "${errorStrings}" | sed 's/","/"\n"/g' | while read error; do
   echo "Checking for $error"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...