UNIX:如何使用格式打印变量的内容。
UNIX: How to print contents of variable with formatting.
我只想像在命令行中一样打印 ls -l(每个文件在一个新行上)。我到处寻找解决方案,并且知道我的解决方案 应该 有效,但由于某种原因它不起作用。我试过:
#!/bin/csh
set list = `ls -l`
echo "$list"
和:
#!/bin/csh
set list = "`ls -l`"
echo "$list"
运气不好。我真正想做的是稍后在 ls -l 上使用 grep(所以我可能会做错),但我不能,因为它将列表打印为一长行。
(是的,我必须使用 csh)
当您 echo
时,我不知道如何绕过 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
这对我来说产生了输出:
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
这里需要重点考虑的是,在(命令替换)反引号 (`...`
) 中,输出由 空格 分隔,而在双引号 ("..."
), 输出由 newlines.
字分隔
也就是说...
What I really want to do is use grep on ls -l later (so maby I'm going about this wrong), but I can't because it prints list as one long line.
完全有可能! :-) 但是,如果不完全了解您要解决的根本问题,帮助您实现您的 解决方案是我们所能做的最好的。当心可怕的 XY Problem.
我只想像在命令行中一样打印 ls -l(每个文件在一个新行上)。我到处寻找解决方案,并且知道我的解决方案 应该 有效,但由于某种原因它不起作用。我试过:
#!/bin/csh
set list = `ls -l`
echo "$list"
和:
#!/bin/csh
set list = "`ls -l`"
echo "$list"
运气不好。我真正想做的是稍后在 ls -l 上使用 grep(所以我可能会做错),但我不能,因为它将列表打印为一长行。 (是的,我必须使用 csh)
当您 echo
时,我不知道如何绕过 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
这对我来说产生了输出:
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
这里需要重点考虑的是,在(命令替换)反引号 (`...`
) 中,输出由 空格 分隔,而在双引号 ("..."
), 输出由 newlines.
也就是说...
What I really want to do is use grep on ls -l later (so maby I'm going about this wrong), but I can't because it prints list as one long line.
完全有可能! :-) 但是,如果不完全了解您要解决的根本问题,帮助您实现您的 解决方案是我们所能做的最好的。当心可怕的 XY Problem.