Использование переменных в терминале - PullRequest
0 голосов
/ 12 сентября 2018

Я написал этот код:

cat /etc/passwd | cut -d : -f1 | sed -n "${FT_LINE1}, ${FT_LINE2} p"

Вывод:

sed: -e expression #1, char 1: unknown command: `,'

Но у меня проблема с переменными $FT_LINE1, $FT_LINE2.
Когда я использую константы вместо переменных, этот код работает правильно

cat /etc/passwd | cut -d : -f1 | sed -n "3, 5 p"

Я пытался использовать эти конструкции:

sed -n -e "${FT_LINE1}, ${FT_LINE2} p"
sed -n "{$FT_LINE1}, {$FT_LINE2} p"
sed -n "${FT_LINE1},${FT_LINE2} p"
sed -n "${FT_LINE1}, ${FT_LINE2}" p
sed -n "$FT_LINE1, $FT_LINE2" p

, но ошибка осталась.

1 Ответ

0 голосов
/ 12 сентября 2018

Как отмечено в melpomene и Комментарии PesaThe , sed диапазоны адресов не могут быть пустыми, обе оболочкипеременные ${FT_LINE1} и ${FT_LINE2} должны быть установлены на некоторое подходящее значение.

Этот простейший способ воспроизвести ошибку:

sed ,

Какие выходные данные:

sed: -e expression #1, char 1: unknown command: `,'

Поскольку , - это , а не a *Команда 1023 *, это просто разделитель, разделяющий адреса диапазонов.

Это может помочь при рассмотрении некоторых других связанных ошибок.Давайте добавим начальный адрес 1 :

sed 1,

Вывод:

sed: -e expression #1, char 2: unexpected `,'

, который кажется бесполезным, так как он должен ожидать адрес после ,.Теперь давайте добавим второй адрес 1 :

sed 1,1

Вывод:

sed: -e expression #1, char 3: missing command

Немного лучше, но на самом деле это char 4, в котором отсутствует команда, илискорее, отсутствует команда после char 3.

Теперь давайте добавим команду и немного ввода, и она будет работать:

echo foo | sed 1,1p

Вывод:

foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...