gpt4 book ai didi

shell - ls -1 在 csh 中没有按预期工作

转载 作者:行者123 更新时间:2023-12-02 03:01:23 28 4
gpt4 key购买 nike

我想逐行列出目录中的所有文件,为此我使用了一个示例 shell 脚本,如下所示

#!/bin/sh
MY_VAR="$(ls -1)"
echo "$MY_VAR"

这会按预期运行,但是如果使用 csh 执行相同的操作,如下所示:

#!/bin/csh
set MY_VAR = `ls -1`
echo $MY_VAR

它在一行中输出所有文件,而不是每行打印一个文件。

谁能解释一下为什么在 csh 中 ls -1 没有按预期工作。

最佳答案

来自 man csh,强调我的:

Command substitution

Command substitution is indicated by a command enclosed in ``'. The output from such a command is broken into separate words at blanks, tabs and newlines, and null words are discarded. The output is vari‐ able and command substituted and put in place of the original string.

Command substitutions inside double quotes (`"') retain blanks and tabs; only newlines force new words. The single final newline does not force a new word in any case. It is thus possible for a command sub‐ stitution to yield only part of a word, even if the command outputs a complete line.

By default, the shell since version 6.12 replaces all newline and car‐ riage return characters in the command by spaces. If this is switched off by unsetting csubstnonl, newlines separate commands as usual.

条目分配在一个列表中;您可以使用例如访问单个条目echo $MY_VAR[2]

这与 Bourne shell 不同,后者没有“列表”的概念,变量始终是字符串。

要在一行中打印所有条目,请使用 foreach 循环:

#!/bin/csh
set my_var = "`ls -1`"

foreach e ($my_var)
echo "$e"
end

建议在 `ls -1` 周围添加双引号,因为这将确保它在文件名带有空格时正常工作(否则此类文件将显示为两个单词/列表项)。

关于shell - ls -1 在 csh 中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977987/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com