![需要帮助理解向程序传递参数](https://linux22.com/image/1535425/%E9%9C%80%E8%A6%81%E5%B8%AE%E5%8A%A9%E7%90%86%E8%A7%A3%E5%90%91%E7%A8%8B%E5%BA%8F%E4%BC%A0%E9%80%92%E5%8F%82%E6%95%B0.png)
假设 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) 中的元素