这些示例已在运行 2017 年 6 月上旬更新的 2017-04-10 版 Raspbian Jessie 的 Raspberry Pi 3 上运行。Bash 的版本为 4.3.30(1)。
最近在尝试一些代码时,我发现正在执行 bash 数组的内容。幸运的是,它们并不危险!
这是一个简单的函数:
#!/bin/bash
echo "y.sh starting"
echo "parameter string is <$@>"
args=( $@ )
echo "args array is <${args[@]}>"
echo "args array length is ${#args[@]}"
echo "y.sh ending"
这是输出
pi@brassica:~ $ ./y.sh
y.sh starting
parameter string is <>
args array is <>
args array length is 0
y.sh ending
pi@brassica:~ $ ./y.sh ls
y.sh starting
parameter string is <ls>
args array is <ls>
args array length is 1
y.sh ending
上面没有什么出乎意料的。
添加 y* 参数后,数组中出现ls 命令输出:
pi@brassica:~ $ ./y.sh ls y*
y.sh starting
parameter string is <ls y01.sh y02.sh y03.sh y04a.sh y04.sh y.sh ytq>
args array is <ls y01.sh y02.sh y03.sh y04a.sh y04.sh y.sh ytq>
args array length is 8
y.sh ending
但是当 -la 添加时,没有额外信息的迹象
pi@brassica:~ $ ./y.sh ls -la y*
y.sh starting
parameter string is <ls -la y01.sh y02.sh y03.sh y04a.sh y04.sh y.sh ytq>
args array is <ls -la y01.sh y02.sh y03.sh y04a.sh y04.sh y.sh ytq>
args array length is 9
y.sh ending
如果有人可以解释为什么要执行命令以及可以进行哪些更改以使其不会被执行,那将非常有帮助。解释为什么不产生 ls 的“长”输出也很有趣。
感谢柴郡猫的家。