关于“

关于“
  1. 我知道我能做到tr a b < file,但是我该怎么做呢ls?例如,如何ls -l从“文件”提供文件列表。我尝试了下面的方法,但没有成功。

    $ cat>test
    A
    B
    C
    $ ls -l < test
    
  2. 我不清楚“<<”或此处文档的用途。

  3. 我的课堂练习之一是使用 vi 创建一个文件,第 1 行包含“:”,第 2 行包含“6/3”。使用第 1 行作为分隔符,第 2 行作为字段,从文件中剪切并显示第 2 列。

我应该循环并将这两行读入变量吗?我用吗sed -n '#p' (file)?有没有优雅的 1 行解决方案?

答案1

一个简单的方法是:

ls -ld -- $(< file )

(假设ksh或兼容的外壳)

但它有一些问题,例如文件名中存在空格或通配符。所以最好使用另一种方法:

xargs -rd '\n' ls -ld -- < file

xargs(这里假设这些-r和选项的 GNU 实现-d)。

答案2

  1. ls不从标准输入读取,因此输入重定向不执行任何操作。你想要的是命令替换。

    ls -l `cat list`
    

    或者

    ls -l $(cat list)
    
  2. 这里的文档用于将标准输入重定向到脚本中提供的固定字符串,而不是单独的文件。您也可以从命令行执行此操作,但这样做的价值有限并且并不常见。

  3. 这根本不符合逻辑。

答案3

回答第一部分:

  1. 您可以使用while循环将文件内容传递给“ls”命令。

    while read line ; do
    ls -l $line 
    done < file
    
  2. 肮脏的方式来做到这一点:

    counter=1
    while read line ; do
        if [ $counter -eq 1 ] ; then 
            delimiter=$line
            counter=$((counter+1))
        elif [ $counter -eq 2 ] ; then
            field=$line
            counter=$((counter+1))
        else
            echo File ended.
        fi
    done < inputfile
    

相关内容