我需要将脚本中的命令输出读入数组.该命令例如是:
ps aux | grep | grep | x
Run Code Online (Sandbox Code Playgroud)
并且它按行给出输出,如下所示:
10
20
30
Run Code Online (Sandbox Code Playgroud)
我需要将命令输出中的值读入数组,然后如果数组的大小小于3,我将做一些工作.
我有一个创建数组的函数,我想将数组返回给调用者:
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?
我有以下问题.我们假设$@它只包含有效文件.变量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) 我希望自动化我的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脚本,我在某个目录中有多个子文件夹,我想列出子文件夹的名称,并将结果读入一个数组,从结果中省略一个名为'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中编写过脚本,所以我想我可能会出现语法错误或者缺少一些大括号或其他内容