相关疑难解决方法(0)

在Bash中将命令的输出读入数组

我需要将脚本中的命令输出读入数组.该命令例如是:

ps aux | grep | grep | x 
Run Code Online (Sandbox Code Playgroud)

并且它按行给出输出,如下所示:

10
20
30
Run Code Online (Sandbox Code Playgroud)

我需要将命令输出中的值读入数组,然后如果数组的大小小于3,我将做一些工作.

arrays bash

83
推荐指数
3
解决办法
11万
查看次数

如何在不使用全局变量的情况下在bash中返回数组?

我有一个创建数组的函数,我想将数组返回给调用者:

create_array() {
  local my_list=("a", "b", "c")
  echo "${my_list[@]}"
}

my_algorithm() {
  local result=$(create_array)
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我只得到一个扩展的字符串.如何在不使用全局的情况下"返回"my_list?

arrays bash global-variables parameter-passing

68
推荐指数
6
解决办法
7万
查看次数

将文件名读入数组

我想得到一个文件列表,然后将结果读入一个数组,其中每个数组元素对应一个文件名.这可能吗?

unix bash cygwin

61
推荐指数
2
解决办法
7万
查看次数

无法在bash中向array添加元素

我有以下问题.我们假设$@它只包含有效文件.变量file包含当前文件的名称(我当前正在"打开"的文件).然后变量element包含格式的数据file:function.

现在,当变量元素不为空时,应将其放入数组中.这就是问题所在.如果我回声element,它包含我想要的,虽然它没有存储在数组中,所以对于循环不打印任何东西.

我写了两种尝试将元素插入数组的方法,但都不起作用.你能告诉我,我做错了什么,拜托?

我正在使用Linux Mint 16.

#!/bin/bash

nm $@ | while read line
do
  pattern="`echo \"$line\" | sed -n \"s/^\(.*\):$/\1/p\"`"
  if [ -n "$pattern" ]; then
    file="$pattern"  
  fi
  element="`echo \"$line\" | sed -n \"s/^U \([0-9a-zA-Z_]*\).*/$file:\1/p\"`"
  if [ -n "$element" ]; then
    array+=("$element")
    #array[$[${#array[@]}+1]]="$element"
    echo element - "$element"
  fi
done

for j in "${array[@]}"
do
  echo "$j"
done
Run Code Online (Sandbox Code Playgroud)

linux arrays bash

6
推荐指数
1
解决办法
2387
查看次数

Bash脚本 - 在变量中存储没有空格的find命令输出

我希望自动化我的xcode项目.除了带有空格的项目名称外,一切正常.我尝试了以下命令:

output_apps=`find ./ -name "*.app" -print`
output_apps=`find ./ -name "*.app"`
Run Code Online (Sandbox Code Playgroud)

我跑的时候

find ./ -name "*.app" -print 
Run Code Online (Sandbox Code Playgroud)

没有存储到变量,它给我输出如下所述的预期:

.//Ten EU.app
.//Ten Official App EU.app
.//Ten Official App.app
.//Ten.app
Run Code Online (Sandbox Code Playgroud)

但是,当我将上述命令的输出存储在变量中时,如下所示

output_apps=`find ./ -name "*.app" -print`
Run Code Online (Sandbox Code Playgroud)

然后运行以下for循环以获取名称

for curr_app in $o
do 
    echo "$curr_app"
done
Run Code Online (Sandbox Code Playgroud)

表明

.//Ten
EU.app
.//Ten
Official
App
EU.app
.//Ten
Official
App.app
.//Ten.app
Run Code Online (Sandbox Code Playgroud)

如何维护每个输出之间的空格并获得以下输出?

Ten EU.app
Ten Official App EU.app
Ten Official App.app
Ten.app
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
2万
查看次数

bash列出文件夹中的所有子目录,将它们写入数组以在菜单中使用

我正在写一个bash脚本,我在某个目录中有多个子文件夹,我想列出子文件夹的名称,并将结果读入一个数组,从结果中省略一个名为'cmmdm'的特定文件夹.一旦我将名称读入数组,我想生成一个菜单,每个子菜单名称作为一个选项,然后我将根据用户的选择在给定的子文件夹上执行一个功能.

编辑:抱歉应该添加我的初始代码:

#!/bin/bash
# - create array
declare -a CDARRAY

# - set 0 to exit in prep for menu
CDARRAY[0]=exit

# - create a counter to use in while loop
count=1

# - while loop to itterate through folder and add each folder except cmmdm into array
ls -d /home/nginx/domains/* | {
    while read CMMDOMAIN ; do

            if [ $CMMDOMAIN != "/home/nginx/domains/cmmdm" ]
            then
            $CDARRAY[$count]=$CMMDOMAIN
            echo $CDARRAY[$count]
            count=$[count + 1]
            fi

    done
}
Run Code Online (Sandbox Code Playgroud)

这确实通过文件夹并忽略'cmmdm'但是我的代码将变量CMMDOMAIN添加到数组是错误的.我之前从未在bash中编写过脚本,所以我想我可能会出现语法错误或者缺少一些大括号或其他内容

arrays bash menu

3
推荐指数
1
解决办法
5121
查看次数

标签 统计

bash ×6

arrays ×4

cygwin ×1

global-variables ×1

linux ×1

menu ×1

parameter-passing ×1

unix ×1