Nik*_*Nik 4 bash shell scripting-language
非常简单的问题可能是但不能让这个工作....基本上我有一个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
Run Code Online (Sandbox Code Playgroud)
所以ARG10的值基本上是ARG1和0,因为ex让你说ARG1作为"文本"而ARG10作为"新"从XML文件传递到shell脚本但是当ARG10在shell脚本中回显时它回应 - "text0"而不是new .
我非常确定这是一个愚蠢的事情,我需要一些帮助,了解我编码错误的地方.
当您有多个数字时,需要使用花括号.
ARGX=${10}
Run Code Online (Sandbox Code Playgroud)
等等(请注意,在赋值语句的整个右侧的参数扩展周围不需要引号.)如果没有大括号,则将$10其解释为$1后跟文字0.
您还可以使用大括号作为单位数参数(以及任何其他shell参数名称),只是为了保持一致性.但是有两位数的参数数字,它们是必需的.
但是,一旦你达到了那么多参数的地步,就可能值得研究一些明确的命名方案.也许你可以使用选项语法,类似于func -name "$name" -text "$text"等等.然后你可以做这样的事情(假设bash> = 4):
declare -A args=()
while (( $# )); do
case "$1" in -*) key="${1#-}";;
*) args[$key]="$1";;
esac
shift
done
# now the name is ${args[name]}, text is ${args[text]}, etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8753 次 |
| 最近记录: |