例如,如果我有变量
var="dog cat owl fish"
我想输入“ cat”(用空格分隔的字符串中的第二个单词)并返回“ 2”,我该如何在不使用bash的shell脚本中执行此操作?
答案 0 :(得分:3)
“没有bash”是什么意思?
以下内容适用于bash,dash和ksh:
#!/bin/____ <- insert your shell here
input=$1
var="dog cat owl fish"
i=1
set -f
for word in $var ; do
if [ "$word" = "$input" ] ; then
echo $i
fi
i=$((i+1))
done
set -f
阻止*
中的$var
进行路径名扩展。在zsh中,您需要set -o SH_WORD_SPLIT 1
在for循环中拆分$var
。
答案 1 :(得分:0)
使用一些核心实用程序:
echo "$var" | tr " " "\n" | grep -n "$input" | cut -d: -f1
答案 2 :(得分:0)
此信息来自先前的post。我只是对其进行了更改,希望能够解决您的问题。
{!join from=Type to=Type fromIndex=core2)(UserId:<VALUE> AND Access:<VALUE>)
{!join from=Id to=Id fromIndex=core2)(UserId:<VALUE> AND Access:<VALUE>)
{!join from=Type to=Type fromIndex=core2)UserId:<VALUE>
{!join from=Id to=Id fromIndex=core2)UserId:<VALUE>
{!join from=Type to=Type fromIndex=core2)Access:<VALUE>
{!join from=Id to=Id fromIndex=core2)Access:<VALUE>
答案 3 :(得分:0)
由于您在评论中提到了awk:
$ echo $var | awk -v s=cat '{for(i=1;i<=NF;i++)if($i=="cat")print i}'
2
解释:
echo $var | # echo $var to awk
awk -v s=cat '{ # parameterized search word
for(i=1;i<=NF;i++) # iterate every word
if($i==s) # if current word is the searched one
print i # print its position
}'
如果var中有换行符(提到了sh):
$ var="dog cat\nowl fish"
$ echo $var
dog cat
owl fish
$ echo $var | awk -v RS="^$" -v s=owl '{for(i=1;i<=NF;i++)if($i==s)print i}'
3
答案 4 :(得分:0)
animals="dog cat owl fish"
tokens=( $animals )
echo ${tokens[1]}