多次读取 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.
我有一个 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.