非常简单的问题可能是但不能让这个工作....基本上我有一个XML文件,在内部允许我将少量参数传递给外部程序,在我的情况下我选择了shell脚本由于不可避免的原因。
现在它正在大部分工作,但我遇到了问题,基本上我传递了从XML到shell脚本的12个参数 - 在shell中传递和使用参数工作正常直到第9个参数当我遇到第10个第11个第12个参数时它们是连接的ARG1为0表示第10个参数,ARG1表示1表示第11个参数,Arg1表示2表示第12个参数。
ARG1=$1 # Name
ARG2=$2 # Text
ARG3=$3 # Model
ARG4=$4 # Network Address
ARG5=$5 # Type
ARG6=$6 # Landscape
ARG7=$7 # Cause
ARG8=$8 # Troubleshooter
ARG9=$9 # Originiating Event
ARGX=$10 # Status
ARGY="$11" # Customer
ARGZ="$12" # Category
所以ARG10的值基本上是ARG1和0,因为ex让你说ARG1作为“文本”而ARG10作为“新”从XML文件传递到shell脚本但是当ARG10在shell脚本中回显时它回应 - “text0”而不是新的 我非常确定这是一个愚蠢的事情,我需要一些帮助,了解我编码错误的地方。
答案 0 :(得分:9)
如果您有多个数字,则需要使用花括号。
ARGX=${10}
等。 (请注意,在赋值语句的整个右侧的参数扩展周围不需要引号。)如果没有大括号,$10
将被解释为$1
,后跟文字{{1 }}
您还可以使用大括号表示单位数参数(以及任何其他shell参数名称),只是为了保持一致性。但是使用两位数的参数数字,它们是必需的。
但是,一旦你得到了那么多参数,就可能值得研究一些明确的命名方案。也许您可以使用选项语法,例如0
等等。然后你可以做这样的事情(假设bash> = 4):
func -name "$name" -text "$text"
答案 1 :(得分:3)
记录完参数后,您可以shift
将其从参数列表中删除:
ARG1=$1; shift #Name
ARG2=$1; shift # Text
ARG3=$1; shift # Model
...