我正在编写Multiboot脚本,但陷入一点混乱,我编写了这样的函数,
读取-p“将iso拖放到终端上:” isofile1
现在我应用了这样的条件:当按下Enter键时,就像传递的那样,它将移至下一部分,但是我想将$ isofile中的所有iso文件存储到不同的增量变量中,我想使用单个变量获取多个变量,以任何方式实现它?
我尝试了
$isofile1==$(isofile1+1) and different ways but no luck...
我想要isofile1 =第一个输入,isofile2 = 2nd输入,依此类推,直到没有输入...
编辑:我现在使用了另一种方法,我只是将所有输入回显到tempfile,现在我只想使用head -n 1从该文件中获取每一行,并将其放在rsync将执行iso文件副本的文件位置在USB中,将所有行逐一放入复制文件的变量中的任何线索 ??
答案 0 :(得分:0)
尝试一下:
read -p "Drag & drop the iso's on Terminal : " isofiles
> iso1 iso2 iso3 ...
for iso in $isofiles; do
echo "$iso"
done
答案 1 :(得分:0)
获得“带有单个变量的多个变量”的最简单方法是使用数组。如果我理解正确,则您正在尝试在单行输入中读取文件路径的列表,并将每个文件路径放入不同的变量中。更好的方法可能是使每个文件路径成为数组中的单独元素。 read
命令可以使用-a
选项执行此操作。这段代码
read -r -p "Drag & drop the iso's on Terminal : " -a isofiles
将读取包含多个文件路径的行,并将第一行放在${isofiles[0]}
中,第二行放在${isofiles[1]}
中,依此类推。
如果通过在终端窗口上放置文件来创建文件列表,则可能有问题。当我在Linux系统上进行测试时,我发现终端窗口中引用了文件路径。上面的代码在设置数组元素时将保留引号字符。如果任何路径包含空格字符,它也会获得不正确的路径。如果需要正确处理输入中带引号的文件路径,则需要更详细的代码。
为回答问题中的EDIT,示例Bash代码从名为“ tempfile”的文件逐行读取文件列表并将其复制到名为“ destdir”的目录中是
while IFS= read -r file || [[ -n $file ]] ; do
cp -- "$file" destdir
done <tempfile
使用IFS=
意味着文件路径中可以包含空格字符。将-r
与read
一起使用可避免文件路径中的反斜杠字符出现问题。 [[ -n $file ]]
测试意味着即使输入文件(tempfile
)中的最后一个文件没有终止,代码也可以正常工作。
请参阅BashFAQ/001(“我如何逐行(和/或逐字段)读取文件(数据流,变量)?”)以获取有关逐行读取输入的更多信息。在Bash中在线。