Как передать список чисел прямо из оболочки в команду?
Как передать список чисел прямо из оболочки в команду? Например, что-то вроде этого
[1,2,3,4] | sort
даст
1
2
3
4
РЕДАКТИРОВАТЬ:
В ответ на ответы любезно размещены до сих пор.,, Я спрашиваю об этом, потому что я хочу быстро протестировать и отладить консольное приложение, которое принимает много цифр при вводе, без необходимости вводить множество отдельных значений, за которыми следует возврат каретки. Я хотел бы просто ввести "один вкладыш" и нажать стрелку вверх, а затем повторить команду. В идеале я хотел бы сделать это без использования текстового файла, содержащего значения (что, очевидно, было бы самым простым способом сделать это).
5 ответов
Я предполагаю, что мы используем однозначные числа - в этом случае echo 1 2 4 3 | grep -o [1234567890]|sort
должен к хитрости. Я думаю, вы должны настроить регулярное выражение для grep, если это многозначный номер.
grep -o выбирает согласно регулярному выражению и печатает его по одному на строку
редактировать: и еще более элегантное решение.
мы все еще используем эхо, но с tr. Это работает с числами больше одной цифры
echo 10,2,4,3|tr ',' '\n'|sort -g
tr говорят заменить запятую на новую строку, а sort -g сортирует по числовому порядку (при условии, что вы хотите отсортировать).
Предполагая, что вам нужны квадратные скобки в списке по какой-то странной причине, вы можете удалить его с помощью
echo [10,2,4,3]|tr '[:punct:]' ' '|tr ' ' '\n'|sort -g
Дополнительная команда tr заменяет любую пунктуацию пробелом.
Вы можете использовать документ "здесь", используя <<
встроенный оператор перенаправления ввода / вывода. Оболочка ищет любой токен, который вы даете (в этом примере eof
) в качестве маркера конца файла для документа здесь.
sort << eof
1
2
3
4
eof
Другим способом будет перебирать значения, echo
их сортировка:
for i in 1 2 3 4; do echo $i; done | sort
Если вы хотите for
цикл упакован как команда, используйте процедуру:
list() for i in $*; do echo $i; done
list 1 2 3 4 | sort
$ printf '%d\n' 1 3 2 4 | sort
1
2
3
4
или же
$ echo $'1\n2\n4\n3' | sort
1
2
3
4
Вы можете использовать кошку
кот | Сортировать 1 2 4 3 ^d (конец ввода)
"Супер простой" ответ: введите команду, а затем введите ввод. (Строго говоря, это не конвейер. Слово "труба" чрезмерно используется в отношении перенаправления ввода / вывода, и это даже не перенаправление ввода / вывода, а просто стандартный ввод / вывод.) Заканчиваем Ctrl+D (при условии, что вы используете какую-то форму * nix или что-то подобное Unix, и что вы не изменили свой EOF-персонаж). Например:
(подскажите)>
sort –f
The
quick
brown
fox
Ctrl+D
brown
fox
quick
The
(подскажите)>
Ctrl+D может отображаться как ^D
и первая строка вывода может появиться в той же строке, что и эта:
^ Dbrown лиса быстрый