假设我让用户输入他想要的多个参数,如何读取所有输入?
因此,如果用户输入asdf asfd asdf,则应该说3个参数 现在我有
#!/bin/bash
read $@
echo "There are $# arguments"
但每当我输入任何内容时,它总是等于0
答案 0 :(得分:1)
如果要使用与从命令行完成的样式相同的样式读取变量中的所有参数。你可以在函数中做到这一点
#!/bin/bash
function param_count() {
for arg in $@
do
echo " arg: $arg"
done
echo "arg count= $#"
}
read foo
param_count $foo
答案 1 :(得分:1)
如果你真的想把一行读作一系列单词,你最好用bash将它读成数组:
$ read -a words
And now a few words from our sponsor
$ echo ${#words[@]}
8
$ echo "${words[3]}"
few
但这不是将参数传递给shell脚本的方法。 read
只是使用空格(或设置为IFS
的任何内容)将行拆分为单词。)它不会:
在命令行上传递参数可以让您完成上述所有操作,使实用程序更方便使用,并且不需要任何额外的工作来提取参数,从而使实用程序更易于编写。
答案 2 :(得分:0)
删除阅读$ @ line。 然后使用参数启动脚本。就像这样:
/path/to/script arg1 arg2 arg3 4 5 6
输出应为:
有6个参数
答案 3 :(得分:0)
这是一个示例脚本,向您展示如何获取参数计数,访问各个参数并读入新变量:
#!/usr/bin/env bash
echo "There are $# arguments, they are:"
for arg in $@
do
echo " - $arg"
done
# Access the aguments
echo "The first argument is $1"
echo "The second argument is $2"
echo "The third argument is $3"
echo "All arguments: $@"
# Read a variable
read var
echo "Some var: $var"
答案 4 :(得分:0)
这是获得它的方法:
read ARGUMENTS
set -- $ARGUMENTS
echo "There are $# arguments"
read ARGUMENTS
阅读输入并将其保存到ARGUMENTS
set -- $ARGUMENTS
将位置参数设置为给定输入
此时,您可以像在命令行中一样使用该输入。
e.g:
echo "$1"
echo "$2"
...