我有以下场景。
我有一个 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 样式的处理管道来说也是一种很好的格式。