a.sh
#!/bin/bash
description=`"test message"` # input parameter for contain a space
binary=<external_prog> # simply display what passes to flag --description
cmd="$binary --description=$description"
$cmd # run the external program
问题:消息会遗漏,如何解决?谢谢!
答案 0 :(得分:1)
#!/bin/bash
description="test message"
binary=program
cmd="$binary --description=\"$description\""
eval $cmd
或只是运行
$binary --description="$description"
答案 1 :(得分:0)
除非您确实有一个名为“测试消息”(名称中有空格)的程序,否则不需要这样做的后面的滴答声:
description=`"test message"` # input parameter for contain a space
实现您的要求的最简单方法是在需要包含空格的(部分)参数周围使用双引号:
description="test message"
binary=external_prog
$binary --description="$description"
您可以等效地将最后一行写为:
$binary "--description=$description"
这确保描述中的所有材料都被视为单个参数,空白和所有。
答案 2 :(得分:0)
如果您正在使用bash或ksh或某些带有数组的shell,则它们是构造命令的最安全的方法。在bash:
description="test message"
binary=some_prog
cmd=( "$binary" "--description=$description" )
"${cmd[@]}"
您可以使用以下内容对其进行测试:说这名为“arg_echoer.sh”
#!/bin/sh
echo "$0"
i=0
for arg in "$@"; do
let i="$i+1"
echo "$i: $arg"
done
然后,如果binary=./arg_echoer.sh
,您可以使用"${cmd[@]}"
./arg_echoer.sh
1: --description=test message
答案 3 :(得分:0)
安全的方法是use an array:
args=("--description=test message" "--foo=some other message")
args+=("--bar=even more")
cmd "${args[@]}"