4

Как передать список чисел прямо из оболочки в команду? Например, что-то вроде этого

[1,2,3,4] | sort

даст

1
2
3 
4

РЕДАКТИРОВАТЬ:

В ответ на ответы любезно размещены до сих пор. , , Я спрашиваю об этом, потому что я хочу быстро протестировать и отладить консольное приложение, которое принимает много цифр при вводе, без необходимости вводить множество отдельных значений, за которыми следует возврат каретки. Я хотел бы просто набрать «один вкладыш» и нажать стрелку вверх, а затем повторить команду. В идеале я хотел бы сделать это без использования текстового файла, содержащего значения (что, очевидно, было бы самым простым способом сделать это).

5 ответов5

5

Вы можете использовать документ "здесь" с помощью оператора перенаправления ввода / вывода << in-line. Оболочка ищет любой токен, который вы даете (в этом примере, eof) как маркер конца файла для документа here.

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
4

Я предполагаю, что мы используем однозначные числа - в этом случае 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 заменяет любую пунктуацию пробелом.

3
$ printf '%d\n' 1 3 2 4 | sort
1
2
3
4

или же

$ echo $'1\n2\n4\n3' | sort
1
2
3
4
2

Вы можете использовать кошку

cat | sort 
1
2
4
3
^d (end of input)
2

«Супер простой» ответ: введите команду, а затем введите ввод.  (Строго говоря, это не трубопровод.  Слово «канал» значительно злоупотребляет ссылкой на перенаправление ввода / вывода, и это даже не перенаправление ввода / вывода, а просто стандартный ввод / вывод.)  Заканчивайте Ctrl+D (при условии, что вы используете * nix или что-то вроде Unix и что вы не изменили свой EOF-символ).  Например:

(подсказка) > sort –f
The
quick
brown
fox

Ctrl+D
brown
fox
quick
The

(подскажите) >

Ctrl+D может отображаться как ^D , и первая строка вывода может появиться в той же строке, что и эта:

^Dbrown
fox
quick
The

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .