需要帮助理解向程序传递参数

需要帮助理解向程序传递参数

假设 p 是一个程序,v 是一个包含字符串“ ab c”的变量

我说得对吗

p $v 将使用以下命令运行 p参数为 a、b 和 c(因此 ac 程序的 argc 为 4)

p "$v" 将运行 p参数,即“ ab c”(因此对于 ac 程序,argc 为 2)

答案1

一个快速测试就能告诉你这一点。我创建了以下脚本:

#!/bin/bash

PARAM1="$1"
PARAM2="$2"
PARAM3="$3"

echo "PARAM1: $PARAM1"
echo "PARAM2: $PARAM2"
echo "PARAM3: $PARAM3"

两种情况的输出都是:

mtak@frisbee:~$ ./params.sh a b c
PARAM1: a
PARAM2: b
PARAM3: c
mtak@frisbee:~$ ./params.sh "a b c"
PARAM1: a b c
PARAM2: 
PARAM3: 

是的,你的说法是正确的。

答案2

回答这个程序的方法是编写一个简单的 shell 脚本(称为“p”):

#! /bin/bash

echo "Arg 0: ".$0
echo "Arg 1: ".$1
echo "Arg 2: ".$2
echo "Arg 3: ".$3

然后你可以玩一下它,看看它会产生什么,你会发现以下内容:

(请记住在操作之前运行 v="ab c",并传递 p $v (而不是 p 1 2 3 - 其行为会有所不同)

两种情况下 argc=2 - 这是有道理的。命令行上的引号表示将所有参数分组为 1 个选项。

如果你需要一个具有多个参数的单个变量,你可以很容易地在 bash 中拆分它们,例如使用类似这样的脚本

#! /bin/bash

i=0
for each in $@
do
       a[i]=$each
       i=$(( $i + 1 ))
done

echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}

将变量拆分为数组 ($a) 中的元素

相关内容