构建带条件参数与引号参数的Bash命令问题求助
解决Bash中WEKA命令参数的空值与组合问题
我完全懂你在构建WEKA分类器命令时的头疼点——空参数带引号会导致命令失效,直接嵌套参数又搞不定各种组合场景。别纠结了,用Bash数组来管理参数是最稳妥的解决方案,能完美适配可选参数空值、带空格参数等各种情况。
核心思路:用数组管理参数,按需添加
Bash数组可以帮你精准控制哪些参数被传入命令,空参数会被自动忽略,带空格的参数也能完整传递,不会被错误拆分。
1. 初始化参数数组并添加必选参数
先把必选的参数(比如分类器类名)加入数组:
# 初始化空数组 weka_cmd_args=() # 添加必选的-class参数 weka_cmd_args+=("-class" "$class")
2. 按需添加可选参数
对每个可选参数(比如$A1、$B1),先判断是否非空,再加入数组:
# 处理A1参数:非空才添加 if [[ -n "$A1" ]]; then weka_cmd_args+=("$A1") fi # 处理B1参数,同理 if [[ -n "$B1" ]]; then weka_cmd_args+=("$B1") fi # 如果是键值对形式的参数(比如-option value),可以一起添加 if [[ -n "$C_value" ]]; then weka_cmd_args+=("-C" "$C_value") fi
3. 执行最终命令
用数组展开的方式执行WEKA命令,这里的"${weka_cmd_args[@]}"会把数组每个元素作为独立参数传递:
java -jar weka.jar "${weka_cmd_args[@]}"
为什么这个方法有效?
- 空参数不会被加入数组,也就不会生成多余的空字符串参数(避免了
""导致的命令解析错误) - 带空格的参数(比如
-C 0.25 -M 2)会作为单个元素存入数组,展开时不会被拆分成多个参数 - 完全灵活适配各种参数组合,不管哪些可选参数为空,最终命令都是合法的
举个实际例子
假设:
class="weka.classifiers.trees.J48"A1="-C 0.25"B1=""(空值)
最终数组展开后执行的命令是:
java -jar weka.jar -class weka.classifiers.trees.J48 -C 0.25
完全没有多余的空参数,WEKA能正确解析。
内容的提问来源于stack exchange,提问作者Leto Atreides
相关产品推荐
相关产品推荐

