繁体   English   中英

如何读取通过Shell脚本传递的参数总数并将其分配给变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM