【发布时间】:2010-11-01 04:50:25
【问题描述】:
我正在使用一个接受以下参数的实用程序(unison,但这不是重点):
$ unison -path path1 -path path2 -path path3
我想编写一个可以这样运行的 sh 脚本:
$ myscript path1 path2 path3
我希望有一个符合 Posix 的解决方案,但特定于 bash 的解决方案也很好。
我猜应该是这样的:
#!/bin/sh
unison ${*/ / -path }
但这不起作用。
编辑:好的,我想我明白了:
#!/bin/bash
PARAMS=
for arg in "$@"
do
PARAMS+=" -path '$arg'"
done
unison $PARAMS
问题是这只适用于 bash,我很确定有更好的方法来引用参数。
【问题讨论】:
-
您是否希望有一个不涉及
for循环的单行解决方案? -
引入单引号可能是个坏主意。正如所写的,unison 命令可以看到引号,这不是您想要的。如果参数中没有任何单引号,则可以使用单引号保护参数的外部 - 但您可能需要一个 eval 才能使其正常工作。
-
mywiki.wooledge.org/BashFAQ/050 在这里很有趣——尽管并非所有答案都适用于 POSIX sh,但它对您提出的解决方案存在哪些问题的解释是完全相关的。