我尝试在变量中构建一组参数并将其传递给脚本,但行为与我的预期不同.
test.sh
#!/bin/bash for var in "$@"; do echo "$var" done
输入
usr@host$ARGS="-a \"arg one\" -b \"arg two\"" usr@host$./test.sh $ARGS
产量
-a "arg one" -b "arg two"
预期
-a arg one -b arg two
请注意,如果将引用的参数直接传递给它运行的脚本.我也可以用eval解决这个问题,但我想了解为什么第一种方法失败了.
解决方法
ARGS="./test.sh -a "arg one" -b "arg two"" eval $ARGS
你应该使用一个数组,在某种意义上它提供了第二级引用:
ARGS=(-a "arg one" -b "arg two") ./test.sh "${ARGS[@]}"
数组扩展为数组的每个元素生成一个单词,因此在构造传递给test.sh的参数列表时,在创建数组时引用的空格不会被视为单词分隔符.
请注意,POSIX shell不支持数组,但这是POSIX shell中引入数组以进行更正的确切缺点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。