2013-08-16 2 views
0

У меня есть сценарий оболочки, который for-loops over input для получения числа и строки. Если я хочу проверить число в цикле, могу ли я отрезать переменную looped-over, чтобы получить номер? Например, что-то вроде:Использование значений переменных в командах оболочки on-the-spot (используя ``)

for line in input 
do 
num=`cut -f1 $line` 
... 
done 

Если нет, то как еще я могу это сделать?

ответ

2

Вместо:

num=`cut -f1 $line` 

Вы можете сделать:

num=$(echo "$line" | cut -f1) 

или же с использованием AWK:

num=$(awk '{print $1}' <<< $line) 

ИЛИ с использованием чистого BASH:

num=${line%% *} 

Ваша команда cut -f1 $line попытается вырезать первый столбец из файла с именем $line.

+0

спасибо! – user1816822

+1

Или 'num = $ {line %% *}', по крайней мере предполагая пробел для разделителя ... – twalberg

+0

@twalberg: Большое спасибо, добавив к моему ответу. Я всегда забываю эти хорошие внутренние функции BASH. – anubhava

0

Это то, что вы хотите вместо этого?

while read -r number str 
do 
    echo $number; 
    echo $str; 
done < input 
Смежные вопросы