захват переменной и добавление 1 к нему

Команду, которую Вы ищете, называют xdg-open

Попробуйте свою команду им:

xdg-open "$(find . -name '*xyz' | head -n1)"
2
06.07.2011, 22:03
3 ответа

Вы используете неправильные кавычки: одинарные кавычки '' предотвратите расширение $ выражения ($var и $(command), и наследие `command` форма). Используйте двойные кавычки "" вместо этого. Хотя в этом случае, если Вы уверены, что это - число затем, Вам не нужны никакие кавычки.

Для Вашего второго вопроса... Вы - продвижение использования, обнуляет? Это указывает восьмеричный, таким образом, цифры 8 и 9 не будет работать.

3
27.01.2020, 21:57
  • 1
    да, я - начальные нули, мне нужно к grep, который обнуляет определенная строка с, но формат его был 01,02,03 так на так, мне нужно к grep как 03-04, но я думаю не работа. –  afbr1201 05.07.2011, 20:34
  • 2
    Если необходимо сделать это, необходимо опустить продвижение, обнуляет для математической части, и затем используйте printf переформатировать с начальным нулем. Или можно попытаться использовать 10#$number видеть, вызовет ли это основу 10. –  geekosaur 05.07.2011, 20:40
  • 3
    Хорошая выгода на восьмеричной вещи. О вопросе нужно вновь заявить, если он на самом деле желает увеличить строку с продвижением 0. –  Mark 05.07.2011, 20:47
  • 4
    @mark, спасибо за предложение, @geekosaur - да, я пробую к grep что-то с продвижением, обнуляют, и добавляющий 10# действительно работал, теперь я просто должен сделать это более твердый путь.. ха-ха, спасибо парни! –  afbr1201 05.07.2011, 21:12

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.

2
27.01.2020, 21:57
  • 1
    эта строка хорошо работал number=${number#${number%%[!0]*}} проблема теперь это я хочу вынудить 0 на выводе также сделать это 2 числами цифры, НАПРИМЕР, 01-09, но не 010-099. какое-либо предложение? А-ч –  afbr1201 07.07.2011, 17:37
  • 2
    простое решение должен использовать 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 добавленных в фиксации для того, чтобы ввести дополненные номера нуля. Это должно быть полным примером теперь.

0
27.01.2020, 21:57
  • 1
    Принятие number содержит набор цифр, $((number+1)) точно эквивалентно $(($number)). Замена параметра выполняется в арифметических выражениях. –  Gilles 'SO- stop being evil' 05.07.2011, 23:17
  • 2
    Это - все еще дурная привычка войти и показывает фундаментальное неверное толкование $((...)) создать. Позвольте ему попробовать $(($number+=50,$number/2)) когда-нибудь и посмотрите то, что он получает. –  Mark 06.07.2011, 20:39
  • 3
    Это, очевидно, повредилось (если $number содержит цифры): Вы не пишете $foo=bar для присвоения в оболочке. (Но на самом деле $(($x+=50)) может иметь смысл, если $x название другой переменной!) (Конечно, я имел в виду $((number+1)) эквивалентно $(($number+1)) выше.) –  Gilles 'SO- stop being evil' 06.07.2011, 21:15
  • 4
    привет, я попробовал ту строку, но это даст мне ошибочную символическую стоимость, является слишком большим для основы enter number 09 a: line 4: 09: value too great for base (error token is "09") –  afbr1201 07.07.2011, 17:28
  • 5
    Да, user774187, восьмеричная вещь, что geekosaur, на который указывают, собирается укусить Вас, когда printf работает. Вам было бы нужно printf -v newvar "%02d" "10#$newvar" избегать той проблемы. –  Mark 07.07.2011, 17:33

Теги

Похожие вопросы