将 shell arg 从一个脚本转义到另一个脚本

将 shell arg 从一个脚本转义到另一个脚本

鉴于./mysh0

#!/bin/bash

exec ./mysh1 $*

./mysh1

#!/bin/bash

echo $1
echo $2
echo $3

我如何调用mysh0这样的参数mysh1和最终打印的内容是“A”、“B 2”和“C”?

将此称为./mysh0 A "B 2" C行不通。

答案1

您必须使用"$@"而不是$*

exec ./mysh1 "$@"

这是将所有位置参数扩展为分隔单词的正确方法。

当您使用 时$*,所有位置参数都连接成一个长字符串,第一个值作为IFS分隔符,默认为空格,您得到A B 2 C

现在,因为您使用时$*不带双引号(可能会导致安全隐患让你的脚本窒息),shellsplit+glob对其执行。上面得到的长字符串被分成四个单词:AB和。2C

因此,您实际上传递了四个参数mysh1而不是三个。

相关内容