Я хочу использовать две переменные в a for
цикл как это (Это, например, я не собираюсь выполняться seq
как операции)
for i j `seq 1 2` 'www.google.com www.yahoo.com';do echo $i $j;done
Ожидаемый вывод
1 www.google.com
2 www.yahoo.com
Если бы я должен был просто быть числом, которое увеличило с каждой строкой, то Вы могли попробовать за цикл и инкремент я с каждым повторением.
, Например:
i=1; for j in 'www.google.com' 'www.yahoo.com'; do echo "$((i++)) $j"; done
Позволяет создают переменную для указания на расположение файла
FILE="/home/user/myfile"
Содержание файла:
www.google.com
www.yahoo.com
Получить вывод:
1 www.google.com
2 www.yahoo.com
Это может быть сделано одним из следующих методов ниже:
Используя переменную счетчика:
i=1;
cat $FILE | while read line; do
echo "$((i++)) $line";
done
Используя cat -n
(число все выходные строки)
cat -n $FILE | while read line; do
echo "$line";
done
Используя массив:
array=(www.google.com www.yahoo.com);
for i in "${!array[@]}"; do
echo "$((i+1)) ${array[$i]}";
done
Если Ваш файл уже с номерами строки, примером:
1 www.google.com
2 www.yahoo.com
Цикл и разделение каждая строка для выстраивания:
cat $FILE | while read line; do
col=( $line );
echo "${col[0]} ${col[1]}";
done
Для большего количества информации:
Вот некоторые альтернативные пути, два коротких и простых:
printf "%s\n" www.google.com www.yahoo.com | cat -n
и
for i in www.google.com www.yahoo.com; do echo $i; done | cat -n
который оба вывода:
1 www.google.com
2 www.yahoo.com
и немного более сложное:
s=(www.google.com www.yahoo.com)
for i in $(seq 1 ${#s[@]}); do
echo $i ${s[i-1]}
done
это производит:
1 www.google.com
2 www.yahoo.com
В том втором предложении я использую названный массив s
созданный со строкой s=(xx yy)
${#s[@]}
синтаксис является числом элементов в массиве, здесь 2
и ${s[i-1]}
элемент при смещении i-1
с начала массива, таким образом ${s[1-1]}
${s[0]}
и затем www.google.com
, и т.д.