2016-05-29 5 views
3

Мне нужно добавить два числа в позиционный аргумент $ 1 с тире между ними, то есть «15-20». Это интервал от 15 до 20, и он должен быть одним позиционным параметром . Я сделал это:Как сделать две переменные из одного позиционного параметра?

#!/bin/sh 
a=$(echo "$1" | sed 's/-/ /g') 
echo $a 

Он печатает: мне нужно будет это в будущем, как интервал, так что я должен взять каждый из этих чисел как отдельные переменные. Вместо a = 15 20 оно должно быть a = 15 и b = 20. Как я могу это достичь?

+0

Почему это должен быть один параметр? Вы управляете сценарием, и вы можете перестроить параметры по своему усмотрению. Сделайте первую строку вашего скрипта 'set $ {@ // - /}', и все параметры, содержащие дефис, будут разделены на два (или более) параметра. Поэкспериментируйте с этим! –

ответ

3

bash Использование Вы можете использовать замену процесса:

read a b < <(echo "$1" | sed 's/-/ /g') 

# and check values 
declare -p a b 
declare -- a="15" 
declare -- b="20" 

Как полезный комментарий от @chepner ниже, вы даже не нужно sed. Вы можете использовать прочитать как переменные, используя пользовательские IFS:

IFS=- read a b <<< "$1" 
+1

'IFS = - читать b <<<" $ 1 "проще. – chepner

+0

Ах, верно, нам даже не нужно 'sed' (отредактировано) – anubhava

4

С /bin/sh, используйте read и здесь документ.

IFS=- read a b <<EOF 
$1 
EOF 

Или используйте расширение параметра дважды, чтобы удалить префикс/суффикс.

a=${1%-*} 
b=${1#*-} 
Смежные вопросы