【发布时间】:2022-01-04 16:38:42
【问题描述】:
我编写了一个函数来检查参数是否已传递给脚本,因此我必须为$@ 创建一个别名变量,因为在函数内部这将是函数的参数。
代码如下:
script_args=$@
is_arg_passed() {
local passed=false
for passed_arg in ${script_args}; do
for arg in "$@"; do
if [[ "${passed_arg}" == "${arg}" ]]; then
passed=true
break
fi
done
[[ "${passed}" == true ]] && break
done
echo "${passed}"
}
虽然我肯定想了解如何更短地实现它,但这不是我的问题的主题(尽管可以提供一些建议;])。
我的问题与for passed_arg in ${script_args}; do 行有关:
为什么script_args 在字符串中扩展时不起作用,即"${script_args}",而"${@}" 或"$@" 起作用。
只有${script_args} 有效。
那么$@ 与常规数组(如(a b c))有何不同,script_args 与$@ 有何不同?
有什么收获?
【问题讨论】:
-
根本不是数组,
script_args也不是。 -
@chepner 我只知道 bash 一天半,所以不太了解
-
@rowboat 的目的是检查是否存在任何给定的参数。感谢您提供信息,是的,我已经意识到最好从功能中使用
return状态。哇,zsh 方式很优雅