2016-05-29 79 views
3

我需要将两个数字添加到位置参数$ 1,并在它们之间有一个破折号,即“15-20”。它是从15到20的间隔,它必须是一个位置参数。我这样做:如何从一个位置参数创建两个变量?

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

它打印: 所以我得把这些数字作为一个单独的变量,我需要这在将来的间隔。而不是= 15 20,它应该是a = 15和b = 20。我怎么能做到这一点?

+0

为什么它必须是一个参数?您可以控制脚本,并且可以根据需要重新构造参数。将脚本的第一行设置为$ {@ // - /}',并将包含连字符的所有参数分成两个(或更多)参数。试验一下吧! –

回答

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#*-} 
相关问题