数组中的Bash值

时间:2012-06-06 07:41:42

标签: linux bash

我有以下

#!/bin/bash
aprograms=`pgrep a`
echo $aprograms

输出:

alejandro@ubuntu:~$ bash test.sh 
2 6 7 8 12 13 16 17 20 27 ...

我想控制$ aprograms中是否有值。 我尝试了以下(我不知道它是否是一个有效的方法):

if [ $value in $aprograms ];then
    echo "found"

但不起作用。是否有正确的方法来控制$ aprograms中是否有值?

5 个答案:

答案 0 :(得分:1)

#!/bin/bash

function foo () {
  echo 2 6 7 8 12 13 16 17 20 27
}

function search_value () { 
  for i in $2; do {
    if [ $i -eq $1 ]; then {
      echo "found"
    } fi
  } done
}

search_value 13 "$( foo )"

只需使用输入程序更改foo

search_value 13 "$( pgrep a )"    

答案 1 :(得分:1)

你可以使用bash的parameter expansion

shopt -s extglob
var="2 6 7 8 12 13 16 17 20 27"
if [ "${var/17?( )/}" != "$var" ] ; then echo "match"; fi

答案 2 :(得分:1)

if [[ " $aprograms " =~ \ $value\  ]] ; then
    echo "found"
fi

此外,还有grep

if pgrep a | grep -q -w "$value" ; then
    echo "found:
fi

答案 3 :(得分:0)

-eq

等于

if [ "$a" -eq "$b" ]

答案 4 :(得分:0)

由于pgrep每行输出一个PID,您可以使用grep找到您要查找的PID。

#!/bin/bash
aprograms=$(pgrep a)
echo "$aprograms"
if grep -Fxqs "$value" <<< "$aprograms"
then
    echo "found"
fi

在扩展变量时始终引用变量以保留空格。

-F的{​​{1}}选项将模式用作固定字符串而不是正则表达式。 grep选项与整行匹配,因此较小的字符串或数字与较大的字符串或数字不匹配。选项-x-q会抑制输出和错误输出。如果您的-s版本没有这些版本,请使用:

grep