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)