gpt4 book ai didi

bash - 操作 sh 中的参数

转载 作者:行者123 更新时间:2023-11-29 09:07:32 24 4
gpt4 key购买 nike

我正在使用接受以下参数的实用程序( 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,我很确定有更好的方法来引用参数。

最佳答案

未选中,它可以像这样简单:

exec unison -path $1 -path $2 -path $3

如果您不在路径名中嵌入空格,那么您可以使用以下方法处理可变数量的参数:

arglist=""
for path in "$@"
do
arglist="$arglist -path $path"
done
exec unison $arglist

如果你的路径名中有空格,那么你就得加倍努力;我通常使用一个名为 escape 的自定义程序,它引用需要引用的参数,以及 eval:

arglist=""
for path in "$@"
do
path=$(escape "$path")
arglist="$arglist -path $path"
done
eval exec unison "$arglist"

我注意到使用 Perl 或 Python 可以更轻松地处理其中包含空格的参数 - 但问题是关于 shell 的。

在 Bash 中使用 shell 数组变量也可能是可行的 - 将参数构建到数组中并将该数组作为参数传递给 unison 命令。

关于bash - 操作 sh 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com