代码之家  ›  专栏  ›  技术社区  ›  Ben

如何使用bash中文件列表中的变量处理文件名

  •  0
  • Ben  · 技术社区  · 15 年前

    我有一个文件“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/”。我做了很多没成功的事,有人知道怎么解决吗?

    谢谢,

    3 回复  |  直到 15 年前
        1
  •  4
  •   jheddings    15 年前

    使用 eval :

    while read file ; do
      eval echo $file
      eval ls $file
    done < FileList.txt
    

    bash 关于 埃瓦 命令:

    这些参数被读取并连接到一个单独的命令中。这个命令是 然后由shell读取并执行,其退出状态返回为 埃瓦 . 如果没有参数或只有空参数, 埃瓦 返回0。

        2
  •  2
  •   ghostdog74    15 年前

    您将使用for循环和cat点击“空格问题”。操作ifs,或者使用while read循环

    while read -r line; do eval ls "$line"; done < file
    
        3
  •  1
  •   Dennis Williamson    15 年前

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