将参数从文件传递到 bash 脚本

Fed*_*nzi 12 scripting bash shell-script

我有这样的情况:

./
./myscript.sh
./arguments.txt
./test.sh
Run Code Online (Sandbox Code Playgroud)

在里面myscript.sh,我必须运行文件test.sh,将里面包含的参数传递给它arguments.txt

myscript.sh是:

arguments=$(cat arguments.txt)
source test.sh $arguments
Run Code Online (Sandbox Code Playgroud)

如果arguments.txt最多包含一个参数,则此方法运行良好:

firstargument 
Run Code Online (Sandbox Code Playgroud)

替换是:

++ source test.sh 'firstargument'
Run Code Online (Sandbox Code Playgroud)

但问题在于两个或多个参数。它这样做:

++ source test.sh 'firstargument secondargument'
Run Code Online (Sandbox Code Playgroud)

另外,我事先不知道里面的参数数量arguments.txt。可以有零个或多个。

iru*_*var 12

假设每一行arguments.txt代表一个单独的参数,使用 bash 4 你可以读arguments.txt入一个数组使用mapfile(文件中的每一行作为一个数组元素,按顺序进入),然后将数组传递给命令

mapfile -t <arguments.txt
source test.sh "${MAPFILE[@]}"
Run Code Online (Sandbox Code Playgroud)

优点是避免了嵌入行内的空间的分裂

使用较低版本的 bash

IFS=$'\n' read -ra arr -d '' <arguments.txt
source test.sh "${arr[@]}"
Run Code Online (Sandbox Code Playgroud)