Bash Script在命令行上读取所有输入

时间:2014-10-11 22:21:42

标签: bash

假设我让用户输入他想要的多个参数,如何读取所有输入?

因此,如果用户输入asdf asfd asdf,则应该说3个参数 现在我有

#!/bin/bash

read $@
echo "There are $# arguments"

但每当我输入任何内容时,它总是等于0

5 个答案:

答案 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的任何内容)将行拆分为单词。)它不会:

  • 处理引号
  • 允许插入shell变量
  • 展开路径名模式

在命令行上传递参数可以让您完成上述所有操作,使实用程序更方便使用,并且不需要任何额外的工作来提取参数,从而使实用程序更易于编写。

答案 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"
...