Как перебирать параметры функции bash и получать значения в этой позиции? [Дубликат]

Если вы рассматриваете 5 или n число десятичных чисел. Может быть, этот ответ решает вашу проблему.

    double a = 123.00449;
    double roundOff1 = Math.round(a*10000)/10000.00;
    double roundOff2 = Math.round(roundOff1*1000)/1000.00;
    double roundOff = Math.round(roundOff2*100)/100.00;

    System.out.println("result:"+roundOff);

Выход будет: 123.01 это можно решить с помощью петлевой и рекурсивной функции.

6
задан Dennis Williamson 20 November 2009 в 11:50
поделиться

5 ответов

Настройте цикл for следующим образом. С помощью этого синтаксиса цикл выполняет итерацию по позиционным параметрам, назначая каждому по очереди.

for point; do
  grep "$str" ${filename}${point}.txt 
done
6
ответ дан Steve K 21 August 2018 в 10:42
поделиться
  • 1
    Я предлагаю цитаты вокруг аргумента filename, чтобы избежать проблем с пробелами. – Aaron Digulla 20 November 2009 в 10:12
  • 2
    Я думаю, что вам не хватает задания, например point="$@". – Dennis Williamson 20 November 2009 в 11:46
  • 3
    Аарон, хороший момент. Я копирую / вставляю эту строку из вопроса без его редактирования. Деннис, это неправильно. Нет необходимости назначать напрямую. См. «Составные команды». раздел руководства Bash для всех деталей. – Steve K 20 November 2009 в 17:43

См. здесь , вам нужно перейти к шагу через позиционные параметры.

2
ответ дан Alberto Zaccagni 21 August 2018 в 10:42
поделиться

Попробуйте что-то вроде этого:

# Iterating through the provided arguments
for ARG in $*; do
    if [ -f filename_$ARG.txt]; then
        grep "$str" filename_$ARG.txt 
    fi
done
1
ответ дан Bobby 21 August 2018 в 10:42
поделиться

Существует несколько способов сделать это, и, хотя я бы использовал shift, вот еще один для разнообразия. Он использует функцию косвенности Bash:

#!/bin/bash
for ((i=1; i<=$#; i++))
do
    grep "$str" ${filename}${!i}.txt
done

. Одно из преимуществ этого метода заключается в том, что вы можете запускать и останавливать свой цикл в любом месте. Предполагая, что вы проверили диапазон, вы можете сделать что-то вроде:

for ((i=2; i<=$# - 1; i++))

Кроме того, если вы хотите последний параметр: ${!#}

4
ответ дан Dennis Williamson 21 August 2018 в 10:42
поделиться
  • 1
    Хорошее дополнение Деннис - просто то, что мне нужно сейчас – joelparkerhenderson 20 November 2011 в 01:21
args=$@;args=${args// /,}
grep "foo" $(eval echo file{$args})
0
ответ дан ghostdog74 21 August 2018 в 10:42
поделиться
Другие вопросы по тегам:

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