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

UNIX:如何使用格式打印变量的内容。,unix,csh,Unix,Csh,我只想打印ls-l,打印方式与在命令行中显示的方式相同(每个文件位于新行上)。我到处寻找解决方案,知道我的解决方案应该有效,但由于某种原因,它不起作用。我试过: #!/bin/csh set list = `ls -l` echo "$list" 以及: 没有运气。我真正想做的是稍后在ls-l上使用grep(所以可能我的想法是错误的),但我不能,因为它将列表打印为一条长线。 (是的,我必须使用csh)我不知道如何避免csh在您回声时将单词连接在一起的行为,但是您可以使用

我只想打印ls-l,打印方式与在命令行中显示的方式相同(每个文件位于新行上)。我到处寻找解决方案,知道我的解决方案应该有效,但由于某种原因,它不起作用。我试过:

    #!/bin/csh
    set list = `ls -l`
    echo "$list"
以及:

没有运气。我真正想做的是稍后在ls-l上使用grep(所以可能我的想法是错误的),但我不能,因为它将列表打印为一条长线。
(是的,我必须使用csh)

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

#!/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
注意,我在FreeBSD上使用了tcsh。你的csh可能不同,你没有提到你的平台

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

#!/bin/csh

set list=( "`ls -l`" )
set n=0
while ( $n < $#list )
    @ n += 1
    echo "$list[$n]"
end
#/bin/csh
集合列表=(“`ls-l`”)
设置n=0
而($n<$#列表)
@n+=1
回显“$list[$n]”
结束
这里需要考虑的重要问题是,在(命令替换)反引号(
`…`
)中,输出是用空格分隔的单词,而在双引号(
“…”
)中,输出是用换行符分隔的单词

也就是说

我真正想做的是稍后在ls-l上使用grep(所以可能我的想法是错误的),但我不能,因为它将列表打印为一条长线


完全可能!:-)但是,如果不完全了解您试图解决的根本问题,我们所能做的就是帮助您实现解决方案。当心恐怖分子。

你为什么不能在csh脚本中执行
/bin/sh-c“随便”
。@Kevin这根本不会改变我的输出。为什么要这样做?你说你只能使用csh,但是你可以使用
/bin/sh-c
来运行Bourne shell命令。
count=3
2 = b

1 : a
2 : b
3 : c
#!/bin/csh

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