Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从文件中获取输入,并将它们存储在shell脚本中的不同变量中_Bash_Shell_File_Sh - Fatal编程技术网

Bash 从文件中获取输入,并将它们存储在shell脚本中的不同变量中

Bash 从文件中获取输入,并将它们存储在shell脚本中的不同变量中,bash,shell,file,sh,Bash,Shell,File,Sh,我有一个问题,我想从shell脚本中的文件获取输入。我已将输入按行存储在文件中,如 input.txt (File) filename attribute name value 这是我的文件格式,我想在我的代码中使用它们 test.js X_CLOUD_ID 100 no 我想从文件中获取输入并执行任务。那么是否可能请告诉我?如果您只想将test.js中包含的值读入脚本中的单独变量,您可以省去很多麻烦,只需使用mapfile或readarray即可将文件的每一行读入数组中的单独元素。内置程序

我有一个问题,我想从shell脚本中的文件获取输入。我已将输入按行存储在文件中,如

input.txt (File)
filename
attribute name
value
这是我的文件格式,我想在我的代码中使用它们

test.js
X_CLOUD_ID
100
no

我想从文件中获取输入并执行任务。那么是否可能请告诉我?

如果您只想将test.js中包含的值读入脚本中的单独变量,您可以省去很多麻烦,只需使用mapfile或readarray即可将文件的每一行读入数组中的单独元素。内置程序从stdin读取输入,您需要包含-t选项以禁止读取每行末尾的“\n”作为输入的一部分

要从文件test.js中读取作为第一个参数位置参数传递到脚本的行,您只需要:

readarray -t arr < "$1"
示例使用/输出

使用文件test.js,您将收到:

$ bash readfile.sh test.js
3 values read from 'test.js'
declare -a arr='([0]="X_CLOUD_ID" [1]="100" [2]="no")'
注意:declare-p只是用来转储数组的内容

您可以在程序中以任何方式使用arr[0]、arr[1]、arr[2]。重复地询问文件名就留给你了。仔细检查一下,如果你还有其他问题,请告诉我


还要注意:bash和posixsh根本不是一回事。POSIX shell没有数组,也没有readarray或mapfile。请从您的问题中删除一个标签。你的/usr/bin/env bash指定bash

首先您可能需要修复脚本。看一看。一旦你解决了脚本中的问题,你应该可以用yourScript.sh#!/bin/bash [ -r "$1" ] || { printf "error: insufficient input.\nusage: %s file\n" "${0##*/}" >&2 exit 1; } declare -a arr readarray -t arr < "$1" || { printf "error: failed to read array from file '%s'.\n" "$1" >&2 exit 1; } printf "%d values read from '%s'\n" ${#arr[@]} "$1" declare -p arr
$ bash readfile.sh test.js
3 values read from 'test.js'
declare -a arr='([0]="X_CLOUD_ID" [1]="100" [2]="no")'