在C#字符串中的换行 在C#中,可以使用换行符来在字符串中创建换行。换行符可以通过在字符串中插入特殊的转义序列来表示。在C#中,常见的换行符是`\n`。 例如,下面的代码演示了如何在C#字符串中使用换行符: ``` string message = "Hello\nWorld"; Console.WriteLine(message); ``` 输出将是: ``` Hello World ``` 通过使用换行符,可以在字符串中创建多行文本。请注意,在字符串中使用换行符时,需要使用双引号将整个字符串
在C#字符串中的换行 在C#中,可以使用换行符来在字符串中创建换行。换行符可以通过在字符串中插入特殊的转义序列来表示。在C#中,常见的换行符是`\n`。 例如,下面的代码演示了如何在C#字符串中使用换行符: ``` string message = "Hello\nWorld"; Console.WriteLine(message); ``` 输出将是: ``` Hello World ``` 通过使用换行符,可以在字符串中创建多行文本。请注意,在字符串中使用换行符时,需要使用双引号将整个字符串
我在下面的C#字符串中遇到了一个随机的换行符,无法确定为什么输出会分成两行。
我实际上只尝试了两种不同的方式来定义变量。两种方式都产生了相同的结果。
string cmdStr = "docker images | grep -E '^prabhasgupte/webmon.*latest' | head -1 | awk '{print $3}'"; Console.Write(cmdStr); string imageId = commands.Bash(cmdStr); Console.Write(imageId); string x = $"docker tag {imageId} scan_target:{imageId}"; Console.Write(x);
这是我收到的输出:
docker images | grep -E '^prabhasgupte/webmon.*latest' | head -1 | awk '{print $3}'
0043699b906f
docker tag 0043699b906f
scan_target:0043699b906f
public static string Bash(this string cmd) { var escapedArgs = cmd.Replace("\"", "\\\""); var process = new Process() { StartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = $"-c \"{escapedArgs}\"", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, } }; process.Start(); string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return result; }
在C#字符串中出现换行的原因是,来自bash命令的imageId
中有一个换行符。尝试修剪结果:
string imageId = commands.Bash(cmdStr).TrimEnd( '\r', '\n', Environment.NewLine.ToCharArray() );
当然,没错,换行符是来自bash命令,但为什么要在C#中添加一个临时解决方法,而不是解决问题的真正来源(awk)呢?
我相信在调用脚本时可以将cat
作为命令行参数传递,这可能会真正删除它,我自己没有尝试过,但会很有趣。
@Çöđěxěŕ cat意味着“流管道”(通常用于文件),所以是的,它确实“泵送”bash的输出。我相当确定它不会插入换行符,因为在grep
其结果是非常常见的。 顺便说一句,我不同意将其标记为一个相同问题的重复..他正在问“为什么”这个“随机”的换行符出现..我是(唯一的)告诉他为什么这个“随机换行符”在那里的人。
在C#字符串中插入换行符可能是awk插入新行的默认行为。我从一个与awk相关的stackoverflow问题中复制了以下内容:
在AWK中,输出记录分隔符(ORS)变量默认为“\ n”,并在每行打印后打印。如果您希望连续打印所有内容,您可以在BEGIN部分将它更改为“ ”。
根据上述信息,可以得出以下结论:
问题的原因是awk在字符串中插入了换行符,默认行为是在每行后插入换行符。解决方法是在awk的BEGIN部分将输出记录分隔符(ORS)变量更改为“ ”,以便连续打印所有内容。下面是解决方法的代码示例:
BEGIN {
ORS = " ";
}
以上是关于在C#字符串中插入换行符的问题的原因和解决方法。希望对你有帮助!