如何从管道向BASH中的变量分配stdin参数

如何从管道向BASH中的变量分配stdin参数,bash,stdin,Bash,Stdin,我在尝试什么: 如果变量来自管道,我尝试将args赋值给它 期望值: 我应该在脚本中做些什么来将参数分配给变量,使它们看起来像这样 if [ -p /dev/stdin ]; then option1="one" option2="two" option3="three" echo "$option1" "$option2" "$option3"

我在尝试什么:

如果变量来自管道,我尝试将args赋值给它

期望值:

我应该在脚本中做些什么来将参数分配给变量,使它们看起来像这样

if [ -p /dev/stdin ]; then
    option1="one"
    option2="two"
    option3="three"
    echo "$option1" "$option2" "$option3"
else
    echo "no input"
fi
输入:
回显一二三。/myscript

输出:
一二三

问题更新: 我需要在|(管道)前面显示的所有参数,作为脚本的字符串输入。 它不应检查是否存在或执行在|(管道)之前存在的二进制文件(此处二进制文件是
echo
)。

输入:
回显一二三。/myscript


输出:
回声一二

您可能只需使用
xargs
。但你所要求的本身并不难做到

if[-p/dev/stdin];然后
读取-r选项1选项2选项3
回显“$option1”“$option2”“$option3”
其他的
回显“无输入”
fi
使用
xargs
,这看起来像

option1=$1
选项2=$2
选项3=3美元
然后你就可以用

echo first second third|
xargs./yourscript

echo一二三|/myscript
中的单词
one
two
three
echo
的参数;但是对于
/myscript
,它们只是输入,而不是参数

从stdin读取“参数” 将每个单词读入它自己的变量使用

if [ -p /dev/stdin ]; then
    read -r option1 option2 option3 
    echo "$option1" "$option2" "$option3"
else
    echo "no input"
fi
如果要允许任意数量的单词,请使用数组。
read-ra myArray
将一行中的所有单词读取到一个数组中。
mapfile-t myArray
将所有行读取到一个数组中。
read-rd'-myArray
将所有行中的所有字读取到一个数组中

要访问数组中的单词,请使用
${myArray[0]}
${myArray[1]}
,…,
${myArray[${myArray[@]}-1]}

使用实际参数 与其解析stdin,不如使用实际参数。为此,执行脚本,如
/myscript一两三
。然后使用位置参数访问参数:

if [ $# = 0 ]; then
   echo "no arguments"
else
   echo "The arguments are $1 $2 $3 ..."
fi

对于任意数量的参数,请检查并
$@

是否允许我提问?执行
echo一二三|/myscript
时,
echo
的输出并不是
myscript
的第一个参数?@Themelis<只有在执行
/myscript one
时,code>one
才是参数。对于
echo one |/myscript
,这只是输入。我在“问题更新”中补充了一个疑问:@AATHITHRAJENDRAN对我来说,你的更新似乎只是澄清了你想要
echo a b c | script
而不是
script a b c
。我唯一能采取的行动就是删除我的最后一半答案。但我没有什么要补充的。如果您仍在询问我没有提到的细节,请详细询问。我对的回答可能有助于澄清参数(您所想到的)和通过STDIN输入(您的脚本实际得到的)之间的区别。