Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
Linux 如何在Bash中使用文件列表中的变量处理文件名_Linux_Bash - Fatal编程技术网

Linux 如何在Bash中使用文件列表中的变量处理文件名

Linux 如何在Bash中使用文件列表中的变量处理文件名,linux,bash,Linux,Bash,我有一个文件“FileList.txt”,其中包含以下文本: /home/myusername/file1.txt ~/file2.txt ${HOME}/file3.txt 所有3个文件都存在于我的主目录中。我想处理来自bash脚本的列表中的每个文件。以下是一个简化的示例: LIST=`cat FileList.txt` for file in $LIST do echo $file ls $file done 当我运行脚本时,我得到以下输出: /home/myusername/f

我有一个文件“FileList.txt”,其中包含以下文本:

/home/myusername/file1.txt
~/file2.txt
${HOME}/file3.txt
所有3个文件都存在于我的主目录中。我想处理来自bash脚本的列表中的每个文件。以下是一个简化的示例:

LIST=`cat FileList.txt`
for file in $LIST
do
  echo $file
  ls $file
done
当我运行脚本时,我得到以下输出:

/home/myusername/file1.txt
/home/myusername/file1.txt
~/file2.txt
ls: ~/file2.txt: No such file or directory
${HOME}/file3.txt
ls: ${HOME}/file3.txt: No such file or directory
如您所见,file1.txt工作正常。但是其他两个文件不起作用。我认为这是因为“${HOME}”变量没有解析为“/HOME/myusername/”。我尝试了很多事情都没有成功,有人知道如何解决这个问题吗

谢谢

-Ben

使用
eval

while read file ; do
  eval echo $file
  eval ls $file
done < FileList.txt
读取文件时
;做
eval echo$文件
eval ls$文件
完成
从有关
eval
命令的
bash
手册页:

arg被读取并连接到一个命令中。此命令是 然后由shell读取并执行,其退出状态作为
eval
。如果没有参数或只有空参数,
eval
返回0

将“ls$file”更改为“eval ls$file”以使shell进行扩展。

使用cat的for循环,您将遇到“空格问题”。操纵IFS,或者改用while read循环

while read -r line; do eval ls "$line"; done < file
读取-r行时
;执行评估ls“$line”;完成<文件

+1这是读取文件的更好方法。。。我也更新了我的答案。