Из команды я получаю несколько аргументов, которые я хочу предложить пользователю с помощью оператора select из bash в сценарии оболочки. Аргументы, предоставленные командой, могут содержать пробелы и поэтому защищены кавычками. Вот упрощенный пример.
Это работает как ожидалось:
select opt in a b "c d"
do
echo $opt
break
done
Результат, как и ожидалось:
1) a
2) b
3) c d
#?
Но с выводом команды в переменной она не работает должным образом:
opts="a b \"c d\""
select opt in $opts
do
echo $opt
break
done
Несмотря на то, что $ opts содержит то же самое, что и жестко заданный тип ввода в первом примере выбора, результат будет другим:
1) a
2) b
3) "c
4) d"
#?
Так что дело не в том, что bash поглотил цитаты. Они сохраняются, но в кавычках не содержится аргумента, как это было, когда я жестко их кодировал. Как я уже писал, я получаю аргументы в качестве вывода из команды. Они могут содержать пробелы и поэтому уже защищены кавычками. Как я могу получить их одним куском к утверждению «выбор»? Речь идет не о одинарных и двойных кавычках. С одинарными кавычками происходит то же самое:
1) a
2) b
3) 'c
4) d'
#?