上下文:https ://stackoverflow.com/a/47348104/15603477
\nprintf -v pasteargs %*s 16\npaste -d\\ ${pasteargs// /- } < <(seq 1 42)\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32\n33 34 35 36 37 38 39 40 41 42\nRun Code Online (Sandbox Code Playgroud)\n\n\nPaste -d, --delimiters=LIST 重用 LIST 中的字符而不是\n制表符
\n
${参数/模式/字符串}
\n\n\n该模式被扩展以产生与文件名扩展中一样的模式。参数被扩展,模式与其值的最长匹配被替换为字符串。匹配\n根据下面描述的规则执行(请参阅模式匹配)。如果\npattern以 \xe2\x80\x98/\xe2\x80\x99 开头,则所有匹配的pattern 都将替换为\n字符串。
\n
经说明书检查后。
\n${pasteargs// /- }。%s指的是printf争论。但%*s 16我不知道。paste -d\\printf %*s 16意思是:打印16个空格。请参阅此答案以获取进一步的解释。所以现在pasteargs是一个值为16个空格的变量。
${pasteargs// /- }意思是:将 变量中所有出现的(空格)替换为(换句话说:在变量中的每个空格之前添加一个连字符)。正如您从手册中引用的: -
\n\n如果模式以 \xe2\x80\x98/\xe2\x80\x99 开头,则模式的所有匹配项都将替换为字符串。
\n
这里的模式是/ ,这意味着:所有空格匹配。所以现在的价值pasteargs是 16 个连字符,以空格分隔。
关于该paste命令,您首先需要了解它后面跟着 16 个连字符,意味着 16 个流。基本上它将每 16 个连续行合并为一行。默认情况下,合并这些行时,它们由制表符分隔。因此paste -d\\ (注意反斜杠后面的尾随空格)意味着用 空格( \\ ) 而不是制表符分隔行分隔行。
总而言之,此命令(如广告所示)只是将输入中的每 16 个连续行合并为以空格分隔的一行。
\n| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |