Можно передать его по каналу через awk и заставить его повторить первое слово
echo * | head -n1 | awk '{print $1;}'
или Вы сокращаете строку и выбираете первое слово:
echo * | head -n1 | cut -d " " -f1
или Вы передаете его по каналу через sed и имеете его, удаляют все кроме первого слова
echo * | head -n1 | sed -e 's/\s.*$//'
Добавленный | head -n1
удовлетворить педантов. В случае, если Ваша строка содержит новые строки | head -n1
выберет первую строку сначала, прежде чем важные команды выберут первое слово из строки, переданной ей.
При предположении, что Вы действительно хотите первое имя файла а не первое слово, вот путь, который не повреждается на пробеле:
shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"
bash
был скомпилирован или среда, возможно на символах обратной косой черты, все же.
– Stéphane Chazelas
24.02.2013, 22:18
text=$(echo *); set -f; files=($text)
, иначе больше подстановочных знаков могло быть расширено.
– Stéphane Chazelas
24.02.2013, 22:23
Можно использовать позиционные параметры
set -- *
echo "$1"
*
при отсутствии файлов в каталоге.
– Chris Down
24.02.2013, 14:47
Если предположить, что позиционная оболочка (/bin/sh
или /bin/bash
может сделать это)
all=$(echo *)
first=${all%% *}
Конструкция ${all%% *}
является примером удаления подстроки . Символ %
означает удаление самого длинного совпадения *
(пробел, за которым следует что угодно) с правого конца переменной all
. Подробнее о манипуляции со строками можно прочитать здесь .
Это решение предполагает, что разделитель - это пробел. Если вы делаете это с именами файлов, то любой с пробелами разобьет его.
Выберите один из следующих вариантов:
$ FILE=($(echo *))
$ FILE=$(echo * | grep -o "^\S*")
$ FILE=$(echo * | grep -o "[^ ]*")
$ FILE=$(find . -type f -print -quit)
Затем вы можете распечатать его через echo $ FILE
.
См. Также: grep
единственное первое слово из вывода?
Получение полного имени первого файла:
shopt -s nullglob
printf '%s\000' * | grep -z -m 1 '^..*$'
printf '%s\000' * | ( IFS="" read -r -d "" var; printf '%s\n' "$var" )
echo *
генерирует – Bananguin 25.02.2013, 16:10-e
или-ee
... появляется в списке, сколько времени\n
появляется в имени файла. Если существует названный файл-n
, это даже не могло бы возвратить строку вообще... – Stéphane Chazelas 25.02.2013, 17:05touch '$a\nb' 'a\nb'; env BASHOPTS=xpg_echo bash -c 'echo * | wc -l'
(xpg_echo
включен везде, гдеbash
требуется, чтобы быть совместимым Unix). И в другом пустом каталоге:touch ./-n; bash -c 'echo * | wc -l'
. Строка является последовательностью символов, завершенных символом новой строки. Еслиecho
не производит символ новой строки, он не производит строки. Поведение текстовых утилит какcut
,awk
илиsed
является неуказанным, если вход имеет дополнительные символы после последнего символа новой строки, и поведение варьируется через реализации. – Stéphane Chazelas 25.02.2013, 19:52