2016-03-15 5 views
2

У меня есть Баш файл:Распаковка имени переменного из файла

agro_233_720 

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

name= agro 
ip= 233 
resolution= 720 

Как может Я их получаю?

Я пытался написать:

name=`basename "$0"` 

, но он выводит имя отверстия (agro_233_720)

Спасибо!

ответ

1
name=$(basename $0 | cut -d_ -f1) 
ip=$(basename $0 | cut -d_ -f2) 
resolution=$(basename $0 | cut -d_ -f3) 

cut разделяет входные данные по разделителю, снабженного -d и возвращает поле в индексе, указанного -f.

+0

Это работает, но не рекомендуется из-за крайне неэффективного использования нескольких внешних программ. – chepner

2

read С:

$ IFS='_' read name ip resolution <<< "agro_233_720" 
$ printf 'name: %s\nip: %s\nresolution: %s\n' "$name" "$ip" "$resolution" 
name: agro                                                         
ip: 233                                                          
resolution: 720 

Он разбивает строку на КСФ разделителем и присвоить значения Варс.

2

С Tcl это можно записать следующим образом,

lassign [ split $argv0 _] name ip resolution 

Если ваша версия Tcl составляет менее 8,5, а затем использовать lindex для извлечения информации.

set input [split $argv0 _] 
set name [lindex $input 0] 
set ip [lindex $input 1] 
set resolution [lindex $input 2] 

В переменной argv0 будет указано имя сценария.

Смежные вопросы