我想向python命令提供文件中存储的多个参数。示例
command \
--param="var1" \
--param="var2" \
--param="var3 var3"
我正在尝试:从文件中读取它们并存储为数组或字符串。当然,任何最佳解决方案都是值得欢迎的。但是,在使用循环/连接字符串并将变量提供给command时,通过python脚本进行解析存在一个问题。
stringparam=""
declare -a myarray=()
while read -r line || [[ -n "$line" ]]; do
if [ ! -z "$line" ]; then
myarray[$index]="--param=\"$line\""
index=$(($index+1))
stringparam+="--param=\"${line}\" "
fi
done < "${input_file}"
echo ${myarray[@]}
echo "${prontos}"
# Execution
python_lib \
"${force}" \
--p1="${varp1}" \
--p2="${varp2}" \
--p3="${varp3}" \
--p4="${varp4}" \
--p5="${varp5}" \
"$(for i in "${myarray[@]}"; do echo ${i}; done)" # approach 1
"${stringparam}" # approach 2
考虑文件内容为:
月亮-煎饼
太阳-星星
脚本输出:
手动提供时的外观,即--param =“ moon-pancake”等。
param =(u'moon-pancake',u'sun-star star')
通过添加循环或串联字符串完成后的外观:
param =(u'“ moon-pancake” --param =“ sun-star star”',)
可能与字符串有关;许多“声明。我在做什么错,有没有更好的bash解决方案?
答案 0 :(得分:1)
我认为您的第二种方法更像GNU / Bash,但是您不应该在其周围使用引号,否则$ stringparam的全部内容将被您的python-lib
可执行文件视为唯一参数。
您应该暂时删除其引号-这次-所有空格字符均应视为参数分隔符:
# Execution
python_lib \
"${force}" \
--p1="${varp1}" \
--p2="${varp2}" \
--p3="${varp3}" \
--p4="${varp4}" \
--p5="${varp5}" \
$stringparam # approach 2
但是为避免单引号和双引号混合出现问题,在构建$ stringparam变量时应使用简单的引号:
stringparam="$stringparam --param='${line}'"