UNIX:如何使用格式打印变量的内容。

时间:2015-10-27 19:33:44

标签: unix csh

我只想打印ls -l,就像从命令行看到的那样(新行上的每个文件)。我已经找到了解决方案的每一个地方并且知道我的解决方案应该工作但是由于某种原因它没有。我试过了:

dataset

    #!/bin/csh
    set list = `ls -l`
    echo "$list"
没有运气。我真正想做的是在ls -l之后使用grep(所以maby我会发生这种错误),但我不能,因为它将列表打印为一条长行。 (是的,我必须使用csh)

1 个答案:

答案 0 :(得分:2)

我不知道如何解决csh在echo时将单词连接在一起的行为,但是您可以使用类似数组的功能和循环。例如:

#!/bin/csh

set list=( "`printf 'a\nb\nc\n'`" )

echo "count=$#list"
echo "2 = $list[2]"
echo

set n=0
while ( $n < $#list )
    @ n += 1
    echo "$n : $list[$n]"
end

对我来说产生输出:

count=3
2 = b

1 : a
2 : b
3 : c

请注意,我在FreeBSD上使用tcsh。你的csh可能有所不同,你没有提到你的平台。

要将其恢复到您的文件列表问题,您可以使用类似的循环复制您正在寻找的输出:

#!/bin/csh

set list=( "`ls -l`" )
set n=0
while ( $n < $#list )
    @ n += 1
    echo "$list[$n]"
end

这里重要的考虑因素是(命令替换)反引号(`...`),输出由空格分隔,而在双引号内("..."),输出由换行符分隔。

那说......

  

我真正想做的是稍后在ls -l上使用grep(所以maby我会发生这种错误),但我不能,因为它将列表打印为一条长行。

完全可能! :-)但是如果没有完全理解你想要解决的潜在问题,帮助你实现你的解决方案是我们能做的最好的事情。小心可怕的XY Problem