如何将参数传递给由另一个脚本生成的脚本

如何将参数传递给由另一个脚本生成的脚本

我有以下场景。

我有一个 Perl 脚本,它需要一个 ID 并从数据库中查找一些参数。假设look_up_args.pl 234打印以下内容abc 123 "something with spaces"

我有另一个 shell 脚本script.sh,它执行以下操作

some_command --param1 $1 --param2 $2 --par3 "$3" ...

我想做的是用参数调用脚本

我尝试过以下2种方法

./script.sh `./look_up_args.pl 234`
./script.sh $(./look_up_args.pl 234)

仍然每当我运行script.sh,$3似乎只包含 "something"导致我的脚本失败。我正在寻找在不进行任何形式的 shell 扩展/等的情况下传递带引号的字符串的方法...第三个参数可能包含其他特殊的 bash 字符,但始终会被引号引起来。

答案1

我不推荐这样做,但请尝试:

eval "./script.sh $(./look_up_args.pl 234)"

这应该可行,但请记住,这eval将评估look_up_args.pl输出中发生的任何情况,这意味着您很容易受到代码注入的攻击。

更好的选择是 @thrig 在评论中建议的:使用标准化的数据格式在工具之间传递数据。即使是换行符分隔的字符串对于 shell 样式的处理管道来说也是一种很好的格式。

相关内容