Сравнение синтаксической ошибки плавает с до н.э

Gilles точно прав, ls действительно плохой пример, потому что расширение шарика имени файла может быть сделано намного легче на командной строке, не имея необходимость использовать ls вообще! Если Ваши так называемые "текстовые файлы" имеют расширения файла для идентификации их, Вы могли бы сделать что-то вроде этого:

editor-command *.txt

Ради демонстрации техники, позволяет, используют более сложный пример, который не мог быть, покончили просто соответствие имени файла и открытые файлы на основе содержания вместо просто имени файла. Позволяет говорят, что Вы хотели открыть все файлы, которые содержали строку "тип контента".

Принятие Вашего редактора будет принимать несколько имен файлов и открывать их внезапно в отдельных буферах или последовательно работать, это - путь через них, можно просто работать:

editor-command $(grep -i content-type)

Теперь назад к Вашему исходному вопросу, позволяет, говорят, что Вы не знаете, являются ли они текстовыми файлами или не на основе их имен. Необходимо было бы затем использовать другую программу для идентификации их, затем открыть их на основе тех данных. Программа file скажет Вам, какой файл что-то, и Вы можете grep, которые перечисляют для просто текстовых файлов и затем открывают просто имена файлов соответствия как это:

editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)

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

find -type f -iname '*xml' | xargs grep -Hi 'content-type' |  cut -d: -f1

... и решите, что я хочу открыть их. Я затем использую последний ярлык истории команд и делаю это:

vim $(!!)

... открыть все результаты предыдущей команды в энергии, моем любимом редакторе.

Если Ваш редактор только примет один файл за один раз, и необходимо продолжать извергать редакторов, необходимо будет использовать вариант любого xargs или for цикл в ответе jmtd в зависимости от того, используете ли Вы на терминальном основанного редактора, которому нужен stdio.

2
25.10.2011, 18:13
3 ответа

То, что Вы сделали, должно было работать; это выполняет bc как указано POSIX. Однако до н.э относительно мало - используемый инструмент и некоторые реализации могут быть багги. Если Вы не используете математических функций, более усовершенствованных, чем +-*/ и сравнения, можно использовать awk; даже исходная реализация A, W и K поддерживала арифметику с плавающей точкой.

echo 3.2 | awk '{exit !($0 > 3)}'
2
27.01.2020, 22:01

expr может обработать сравнения плавающие как этот, очень хорошо.

ksh -c '(( $(expr 3.2 \> 3) == 1 )) && echo 1 || echo 0'

или используйте его в сценарии, как:

#!/usr/bin/ksh

if [ $(expr $1 \> $2) == 1 ]; then
    echo "greater"
else 
    echo "lesser"  
fi

можно найти, что expr является более портативным, потому что до н.э строка, которую Вы используете выше работ над Linux, но не над solaris., использующим expr, должна работать то же над любым из тех Ose.

1
27.01.2020, 22:01
  • 1
    expr по-видимому, делает сравнение строк, как expr 3.0 \> 3 дает 1 (верный) и expr 3.0 = 3 дает 0 (ложь). Около этого нет никакой потребности к внешней проверке: if expr $1 \> $2 > /dev/null; then echo "greater"; else echo "lesser"; fi. –  manatwork 25.10.2011, 19:14
  • 2
    острое наблюдение. expr только делает числовое сравнение, если обоими аргументами являются целые числа. это сказало, все большие, чем сравнения, что я сделал, работали как ожидалось. Я предполагаю, что awk мог сделать это также: echo 3.2 3 | awk '{if ($1 > $2) print "1"; else print "0";}' –  Tim Kennedy 25.10.2011, 20:35

При наличии попробовать dc:

echo "2 k 3.2 3 [1p] sa <a" | dc

Обратите внимание, что вышеупомянутое будет также использовать 2 десятичной точности и произведет 1, если первое число (3.2 в вышеупомянутом примере) будет больше, чем второе число (3 выше). Но иначе ничего не произведет.

dc bcбрат, в документации GNU описал с теми же “словами” калькулятора произвольной точности. В некоторых дистрибутивах они поставляются в том же пакете, в других дистрибутивах они упаковываются отдельно.

1
27.01.2020, 22:01

Теги

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