Bash не имеют никакой функции для расширения всего одного соответствия из многих.
образец (нечто)
соответствия всего одно возникновение из образца нечто
. Таким образом, это соответствует нечто
, но не foofoo
. Эта синтаксическая форма полезна для сборки или узоров как (foo|bar)
, который соответствует или нечто
или панель
. Это может использоваться в качестве части более длинных узоров как (foo|bar) -*.txt
, который соответствует foo-hello.txt
, foo-42.txt
, bar-42.txt
, и т.д.
, Если вы хотите использовать одно соответствие среди многих, можно поместить соответствия в массив и затем использовать элемент массива.
kernels=(vmlinuz*)
ls -l "${kernels[0]}"
Соответствия всегда сортируются в лексикографическом порядке, таким образом, это распечатает первое соответствие в лексикографическом порядке.
Примечание, что, если образец не соответствует никакому файлу, вы получите массив, содержащий единственный элемент, который является неизменным образцом:
$ a=(doesnotmatchanything*)
$ ls -l "${a[0]}"
ls: cannot access doesnotmatchanything*: No such file or directory
Набор опция nullglob
получить пустой массив вместо этого.
shopt -s nullglob
kernels=(vmlinuz*)
if ((${#kernels[@]} == 0)); then
echo "No kernels here"
else
echo "One of the ${#kernels[@]} kernels is ${kernels[0]}"
fi
Zsh имеет удобные функции здесь. спецификатор шарика [ ЦИФРА ]
причины образец для расширения только до соответствия NUMth; вариант [ NUM1, NUM2]
расширяется до NUM1th через соответствия NUM2th (запускающийся в 1).
% ls -l vmlinuz*([1])
lrwxrwxrwx 1 root root 26 Nov 15 21:12 vmlinuz -> vmlinuz-3.16-0.bpo.3-amd64
% ls -l nosuchfilehere*([1])
zsh: no matches found: nosuchfilehere*([1])
Спецификатор шарика N
заставляет образец расширяться до пустого списка, если никакой файл не подобран.
kernels=(vmlinuz*(N))
if ((#kernels)); then
ls -l $kernels
else
echo "No kernels here"
fi
спецификатор шарика ом
соответствия видов путем увеличения возраста вместо по имени ( m
в течение времени изменения); Ом
виды путем уменьшения возраста. Так vmlinuz* (ом [1])
расширяется до нового файла ядра.
"одно соответствие" не означают то, что вы думаете, что оно делает. Это означает одно соответствие в образце , чтобы не только возвратить один файл. ls
не имеет никаких опций как этот. Обычно, люди делают вещи как ls |head-1
или подобный.