its*_*dok 4 bash shell scripting sh
我正在使用一个实用程序(unison,但这不是重点)接受如下参数:
$ unison -path path1 -path path2 -path path3
Run Code Online (Sandbox Code Playgroud)
我想写一个我可以这样运行的sh脚本:
$ myscript path1 path2 path3
Run Code Online (Sandbox Code Playgroud)
我希望有一个符合Posix标准的解决方案,但特定于bash也会很好.
我猜它应该是这样的:
#!/bin/sh
unison ${*/ / -path }
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
编辑:好的,我想我得到了一些东西:
#!/bin/bash
PARAMS=
for arg in "$@"
do
PARAMS+=" -path '$arg'"
done
unison $PARAMS
Run Code Online (Sandbox Code Playgroud)
问题是这只适用于bash,我很确定有更好的方法来引用参数.
未经检查,可能很简单:
exec unison -path $1 -path $2 -path $3
Run Code Online (Sandbox Code Playgroud)
如果您没有在路径名中嵌入空格,那么您可以处理可变数量的参数:
arglist=""
for path in "$@"
do
arglist="$arglist -path $path"
done
exec unison $arglist
Run Code Online (Sandbox Code Playgroud)
如果你的路径名中有空格,那么你必须努力工作; 我通常使用一个名为的自定义程序escape,它引用需要引用的参数,并且eval:
arglist=""
for path in "$@"
do
path=$(escape "$path")
arglist="$arglist -path $path"
done
eval exec unison "$arglist"
Run Code Online (Sandbox Code Playgroud)
我注意到使用Perl或Python会使处理带有空格的参数更容易 - 但问题是关于shell.
在Bash中使用shell数组变量也是可行的 - 将参数构建到数组中并将数组作为参数传递给unison命令.
| 归档时间: |
|
| 查看次数: |
4606 次 |
| 最近记录: |