如何在脚本中格式化通过bash脚本传递的参数数量?这是我目前可以使用的:
#!/bin/bash
echo "$# parameters"
echo "$@"
但是我想格式化正在使用的函数,但是每次运行它时,它都会返回为0参数:
#!/bin/bash
example()
{
echo "$# parameters"; echo "$@";
}
example
我是否错误地考虑了这一点?
答案 0 :(得分:1)
您没有将参数传递给函数。
#! /bin/bash
EXE=`basename $0`
fnA()
{
echo "fnA() - $# args -> $@"
}
echo "$EXE - $# Arguments -> $@"
fnA "$@"
fnA five six
输出:
$ ./bash_args.sh one two three
bash_args.sh - 3 Arguments -> one two three
fnA() - 3 args -> one two three
fnA() - 2 args -> five six
使用function
关键字是POSIX标准 not 。 bash
支持该功能,以实现ksh
的兼容性。
编辑:根据戈登的注释用引号"$@"
-防止重新解释用引号括起来的字符串中的所有特殊字符
答案 1 :(得分:0)
第二个应该工作。以下是我每天使用的几个具有相同功能的类似示例。
function dc() {
docker-compose $@
}
function tf(){
if [[ $1 == "up" ]]; then
terraform get -update
elif [[ $1 == "i" ]]; then
terraform init
else
terraform $@
fi
}
function notes(){
if [ ! -z $1 ]; then
if [[ $1 == "header" ]]; then
printf "\n$(date)\n" >> ~/worknotes
elif [[ $1 == "edit" ]]; then
vim ~/worknotes
elif [[ $1 == "add" ]]; then
echo " • ${@:2}" >> ~/worknotes
fi
else
less ~/worknotes
fi
}
PS:OSX我需要声明function
,在其他操作系统(如Ubuntu)上可能不需要它