xargs命令-L选项异常行为:行尾空格为何影响执行次数?
echo -e "a b \nc d"|xargs -L1 a b c d echo -e "a b\nc d"|xargs -L1 a b c d
差异原因解析
这是因为xargs处理输入时,会把行尾的空格当成该行未结束的标记,默认将后续的换行符视为普通空白字符(和空格、制表符等价),而非新行的分隔符。
具体细节:
- 第一个命令中,
echo -e "a b \nc d"输出的第一行末尾带空格,xargs判定这行内容不完整,于是把第二行的c d和第一行内容合并成同一个逻辑行处理,-L1参数要求每个命令行最多用1行输入,所以只会执行一次,输出合并后的所有内容。 - 第二个命令中,
echo -e "a b\nc d"的第一行末尾无空格,xargs识别这是完整的逻辑行,第二行被当作独立的新逻辑行,因此-L1会分两次执行,分别输出两行内容。
xargs的-L参数是按逻辑行计数,而非物理换行符。只有当行尾无空格时,物理换行符才会被当作逻辑行的分隔;行尾有空格时,物理换行符会被忽略,前后行合并为一个逻辑行。
内容的提问来源于stack exchange,提问作者alexis
相关产品推荐
相关产品推荐

