迭代命令行参数对

时间:2017-06-14 20:41:48

标签: linux bash shell unix

我有一个超过400个坐标,我想作为参数传递给一个字符串,但我不知道如何将第一个参数作为“lat”传递,第二个参数传递为“lng”,依此类推其余部分。

说我在传递这个

./test 1 2 3 4

我希望我的输出

coordinate: {lat: 1, lng: 2}
coordinate: {lat: 3, lng: 4}

这是我到目前为止所做的,但显然这不是它的完成方式。

for i in $@
do

    echo "coordinate: {lat: $i, lng: $i}"

done

3 个答案:

答案 0 :(得分:4)

/settings.js

请注意,#!/usr/bin/env bash while (( "$#" >= 2 )); do echo "coordinate: {lat: $1, lng: $2}" shift 2 done shift; shift优先于许多圈子,因为即使只剩下一个参数,它也能正常工作; shift 2以上是安全的,因为我们正在比较shift 2以确保始终存在两个或更多参数。

答案 1 :(得分:3)

您不需要循环:

printf "coordinate: {lat: %s, lng: %s}\n" "$@"

在放入路径之前重命名脚本(类似于/ usr / local / bin),因为test是内置函数。

答案 2 :(得分:0)

你可以使用shift(但不要这样做 - 请参阅下面的评论):

while [ -n "$1" ]
do
    echo "{coordinate: {lat: $1, lng $2}"
    shift 2
done