在shell脚本中使用空格执行动态创建的命令

时间:2011-11-07 12:32:52

标签: shell

我必须编写一个脚本,该脚本生成并执行一个包含文件名的可变数量参数的命令。这些文件名可能包含空格,一切都必须正常,无论是否有空格。

例如,此生成的命令可能如下所示:

curl --data-urlencode "js_code@/tmp/some folder/data.txt" http://www.someurl.com

如果我使用硬编码命令并执行它,所有运行正常,有空格和无空格。但是,如果我在字符串变量中创建命令文本,并执行字符串内容,则该命令似乎不会仅使用文件的第一部分来考虑引号:

脚本(简化,假设命令字符串是使用复杂规则创建的):

#!/bin/sh
#prepare
command="curl --data-urlencode \"param_value@/tmp/some folder/data.txt\" www.someurl.com"
#execute
$command

结果:

$ ./test.sh
Warning: Couldn't read data from file ""param_value@/tmp/some", this makes an
Warning: empty POST.
curl: (6) Couldn't resolve host 'folder'

我尝试了不同的东西,使用像exec这样的东西切换引号样式,但是我无法让它工作。

任何帮助将不胜感激

由于

注意:我应该在Cygwin上添加所有这些测试。关于路径语法可能很重要。

2 个答案:

答案 0 :(得分:4)

你应该使用eval:

eval "$command"

答案 1 :(得分:0)

你试过了吗?

command='curl --data-urlencode "param_value@/tmp/some\ folder/data.txt" www.someurl.com'