读取文件后,找不到echo命令

时间:2017-08-10 18:20:37

标签: bash echo ifs

我确信这是重复的,但我搜索相关信息却没有找到任何内容。

我正在使用mapfile来读取文件,但我需要运行脚本的设备没有加载它。所以我选择了另一种方式。

这不是我的脚本,而是一个测试脚本来证明我的观点。

我有一个包含大量统计数据的文件,为了理智而在下面缩短。

echo Carbon\Carbon::parse(DB::table('users')->find(1)->created_at)->toCookieString();

我使用以下代码将文件读入数组(我想在脚本中多次使用此数组)。但是逐行回声。我在每一行都找不到命令。我无法弄清楚如何解决这个问题。

Status                   
 Availability     : available
 State            : enabled
 Reason           : The virtual server is available
 CMP              : enabled
 CMP Mode         : all-cpus


Traffic                    ClientSide  Ephemeral  General
 Bits In                           0          0        -
 Bits Out                          0          0        -
 Packets In                        0          0        -
 Packets Out                       0          0        -
 Current Connections               0          0        -
 Maximum Connections               0          0        -
 Total Connections                 0          0        -
 Min Conn Duration/msec            -          -        0
 Max Conn Duration/msec            -          -        0
 Mean Conn Duration/msec           -          -        0
 Total Requests                    -          -        0

结果如下

#!/bin/bash

getArray() {
    array=() # Create array
    while IFS= read -r line # Read a line
    do
        array+=("$line") # Append line to the array
    done < "$1"
}

infile="/home/tony/Desktop/test.txt"

file=getArray $infile

for i in ${file[@]};
do :
    echo "$i"
done

我尝试过双重qouting $ i,单个qouting $ i,以及qouting / unqouting数组。我尝试过的任何东西都没有产生任何结果,但是:找不到命令

2 个答案:

答案 0 :(得分:0)

这有效:

getArray() {
    array=() # Create array
    while IFS= read -r line # Read a line
    do
        array+=("$line") # Append line to the array
    done < "$1"
}

infile="/tmp/file"
getArray "$infile" # you would need a return value for "file=getArray $infile"
                   # and you would write it differently

for i in "${array[@]}";
do 
    echo "$i"
done

你有三个问题:

  1. file=getArray $infile不会返回数组读取。您需要更改功能和分配才能正常工作
  2. 你的循环中还有一个:
  3. 你需要for循环中数组周围的引号,以避免单词拆分。

答案 1 :(得分:0)

你是对的。我假设该函数将数组返回到$ file,但事实并非如此。我在函数中创建$ {file [@]}。

搞定了

#!/bin/bash

getArray() {
  file=() # Create array
  while IFS= read -r line # Read a line
  do
      file+=("$line") # Append line to the array
  done < "$1"
}


infile="/home/tony/Desktop/test.txt"
getArray $infile

for i in "${file[@]}";
do :
  echo "$i"
done