多次读取 bash 个脚本参数

Read bash script arguments multiple times

我有一个 bash 脚本,它可以传递许多不同的参数和变量以供脚本本身使用。一些参数被分配给变量。 第二个 while 循环 在程序尝试执行时似乎不是 运行。出于 confidentiality/simplicity 原因,我简化了以下脚本。

./myscript --dir2 /new/path
while :; do
  case  in
    --var1) $var1=
    ;;
    --var2) $var2=
    ;;
    "") break
  esac
  shift
done

$dir1=/default/directory
$dir2=/default/directory

while :; do
  case  in
    --dir1) $dir1=
    ;;
    --dir2) $dir2=
    ;;
    "") break 
  esac
  shift
done

echo "Expect /default/directory, returned: $dir1" 
echo "Expect /new/path, returned: $dir2"

这是我的程序有效的 return。

Expected /default/directory, returned: /default/directory
Expected /new/path, returned: /default/directory

有没有更好的方法来解决这个问题?或者另一种迭代最初传递给脚本的参数的方法?感谢您的帮助!

这是因为你使用 shift 消耗了元素。尝试使用 for 循环遍历参数。有几种方法可以做到这一点。这是我的首选方法:

for elem in "$@" # "$@" has the elements in an array 
do
   ... # can access the current element as $elem
done

另一种方法是通过索引访问它们,您可以查找有关 bash 数组语法的教程。

如果你想保留你的参数,你可以将它们复制到一个数组中,然后从该数组中恢复原始列表:

#!/usr/bin/env bash
#              ^^^^ - must be invoked as bash, not sh, for array support

# Copy arguments into an array
original_args=( "$@" )

# ...consume them during parsing...
while :; do # ...parse your arguments here...
  shift
done

# ...restore from the array...
set -- "${original_args[@]}"

# ...and now you can parse them again.