关于shell:ash:删除最后一个参数

ash: Remove last param

我在一个只有sh和ash可用的busybox环境中。

现在我正在编写一个脚本,我需要将除最后一个参数之外的所有参数传递给ln。

到目前为止它看起来像这样:

1
2
3
4
5
6
#!/bin/ash
TARGET="/some/path/"

for last; do true; done

ln $@ $TARGET$last

显然现在我将最后一个参数传递两次,首先是未修改的,然后在前面用$ TARGET修改。

我如何摆脱$ @中的最后一个参数?


你可以试试这种方式

1
2
3
4
5
6
last_arg () {
shift $(($#-1))
echo"$@"
}
last=$(last_arg"$@")
echo"all but last = ${@%$last}"


现在有一个工作的解决方案,它不是那么好,它改变了参数,但直到一个更好的解决方案出现,这将做到这一点。

1
2
3
4
5
6
7
for last; do true; done
while [["$1" !="$last" ]] ; do
    args="$args $1"
    shift
done

echo $args