[英]How to read total number of argument passed with a shell script and assign it to a variable
我想运行一个带有一些自变量的shell脚本,自变量的数量会不断变化,我想先读取已传递的自变量的总数,然后读取每个自变量的总数,并借助“对于“”或“ while”循环,我正在执行以下操作,但未将参数分配到变量中
正在运行的脚本如下sh My_script.sh ARG1 ARG2 ARG3 ... ARGn
我试图写如下
#!/bin/bash
TOTAL_ARG=$#
NEW_PATH=""
n=1
While [[ $n -le $TOTAL_ARG ]]
do
CUS_PATH=""
CUS_PATH="$`echo $n`"
NEW_PATH="$WORSPACE"/"$CUS_PATH"" "
echo $NEW_PATH
n=$((n+1))
done
看起来CUS_PATH =“ $ echo $n
”行无法执行并产生$ 1 $ 2 $ 3 $ 4 ... $ n的值
所有这些循环都是不必要的。 您的代码可以简化为:
#!/bin/bash
new_path="$*"
echo "new_path is '$new_path'"
例如,在您的参数列表上运行它:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is 'ARG1 ARG2 ARG3 ... ARGn'
如果您真的想通过变量n
的数字访问参数(很少需要):
#!/bin/bash
new_path="$*"
echo "new_path is '$new_path'"
n=3
echo "Argument #$n is '${!n}'"
举个例子:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is 'ARG1 ARG2 ARG3 ... ARGn'
Argument #3 is 'ARG3'
尝试:
$ cat My_script.sh
#!/bin/bash
workspace=/abc/def
for x in "$@"
do
new_path="$new_path $workspace/$x"
done
echo "new_path is '$new_path'"
例如:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is ' /abc/def/ARG1 /abc/def/ARG2 /abc/def/ARG3 /abc/def/... /abc/def/ARGn'
或者:
$ cat My_script.sh
#!/bin/bash
workspace=/abc/def
new_path=" $*"
new_path=${new_path// / $workspace/}
echo "new_path is '$new_path'"
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is ' /abc/def/ARG1 /abc/def/ARG2 /abc/def/ARG3 /abc/def/... /abc/def/ARGn'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.