Команду, которую Вы ищете, называют xdg-open
Попробуйте свою команду им:
xdg-open "$(find . -name '*xyz' | head -n1)"
Вы используете неправильные кавычки: одинарные кавычки ''
предотвратите расширение $
выражения ($var
и $(command)
, и наследие `command`
форма). Используйте двойные кавычки ""
вместо этого. Хотя в этом случае, если Вы уверены, что это - число затем, Вам не нужны никакие кавычки.
Для Вашего второго вопроса... Вы - продвижение использования, обнуляет? Это указывает восьмеричный, таким образом, цифры 8
и 9
не будет работать.
geekosaur уже объяснил, почему Ваша первая попытка перестала работать. Вот некоторые дополнительные подсказки относительно того, что Вы пытаетесь сделать.
Если Вы ищете число как 42
, Вы, вероятно, хотите соответствовать 042
но нет 1042
или 421
. Все, чего необходимо достигнуть, который является более необычным регулярным выражением. Принятие $newnumber
содержит число (целое число, положительное, в десятичной записи) без начального нуля, искать $newnumber
предшествовавший или к началу строки или к символу нецифры, и аналогично после. 0*
далее позволяет вести, обнуляет. -E
опция говорит grep
то, что Вы используете современный синтаксис регулярного выражения (в противоположность историческому синтаксису, который является более изворотливым и менее мощным).
grep -E "(^|[^0-9])0*$newnumber(\$|^[0-9])" /path/to/file
Проанализировать число с потенциальным продвижением обнуляет в ударе, можно использовать $((10#$newnumber))
вызвать десятичную интерпретацию. В других оболочках это немного более сложно; существует конструкция оболочки для получения значения переменной без конкретного префикса ${var#prefix}
, и подобная конструкция для суффиксов ${var%suffix}
, но нет никакого способа указать “самую длинную последовательность 0
символы” как префикс для разделения. Но это может быть сделано на двух шагах: сначала получите часть var
это не продвижение, обнуляет, и используйте это в качестве префикса для разделения. Часть var
это не начальные нули, его самый длинный суффикс, который начинается с ненулевого, которое является ${var%%[!0]*}
(двойное %
средства вынуть самый длинный суффикс, который соответствует шаблону; сингл %
вынул бы самый короткий суффикс).
read number
number=${number#${number%%[!0]*}}
Дальнейшее примечание: grep REGEXP /some/file
ищет один файл /some/file
. Если Вы хотите искать все файлы в каталоге, позвольте оболочке генерировать список файлов: grep REGEXP /some/dir/*
. Если Вы хотите искать все файлы в каталоге и его подкаталогах рекурсивно, передайте -r
опция к grep
заставить его рекурсивно вызвать: grep -r REGEXP /some/dir
.
number=${number#${number%%[!0]*}}
проблема теперь это я хочу вынудить 0 на выводе также сделать это 2 числами цифры, НАПРИМЕР, 01-09, но не 010-099. какое-либо предложение? А-ч
– afbr1201
07.07.2011, 17:37
printf
: printf %02d "$number"
, или printf '%02d\n' "$number"
если Вы хотите добавить новую строку.
– Gilles 'SO- stop being evil'
07.07.2011, 18:43
Как geekosaur сказал, Вы используете неправильные кавычки. Палка с doublequotes, когда Вы хотите, чтобы оболочка развернула ссылку на переменную до значения.
Во-вторых, Вы делаете математику в двойных круглых скобках неправильно. Вы не хотите $ внутри там, ссылки на переменную в $ (()), конструкция не нуждается в $.
#!/bin/bash
echo "enter number"
read number
newnumber=${number#${number%%[!0]*}}
newnumber=$((newnumber + 1))
echo "$number changes to $newnumber"
Те два изменения работают на меня в Вашем оригинале также...
read var
newvar=${var#${var%%[!0]*}}
newvar=$((newvar + 1))
printf -v newvar "%02d" "$newvar"
grep "$newvar" /some/dir
ОБНОВЛЕНИЕ, добавленное printf
строка для форматирования вывода. ОБНОВИТЕ 2 добавленных в фиксации для того, чтобы ввести дополненные номера нуля. Это должно быть полным примером теперь.
number
содержит набор цифр, $((number+1))
точно эквивалентно $(($number))
. Замена параметра выполняется в арифметических выражениях.
– Gilles 'SO- stop being evil'
05.07.2011, 23:17
$((...))
создать. Позвольте ему попробовать $(($number+=50,$number/2))
когда-нибудь и посмотрите то, что он получает.
– Mark
06.07.2011, 20:39
$number
содержит цифры): Вы не пишете $foo=bar
для присвоения в оболочке. (Но на самом деле $(($x+=50))
может иметь смысл, если $x
название другой переменной!) (Конечно, я имел в виду $((number+1))
эквивалентно $(($number+1))
выше.)
– Gilles 'SO- stop being evil'
06.07.2011, 21:15
enter number 09 a: line 4: 09: value too great for base (error token is "09")
– afbr1201
07.07.2011, 17:28
printf -v newvar "%02d" "10#$newvar"
избегать той проблемы.
– Mark
07.07.2011, 17:33
printf
переформатировать с начальным нулем. Или можно попытаться использовать10#$number
видеть, вызовет ли это основу 10. – geekosaur 05.07.2011, 20:40