Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:$(…)修剪尾随的空行。如何正确分配给变量一个命令';谁的产量?_Bash_Command_Output_Newline_Trim - Fatal编程技术网

bash:$(…)修剪尾随的空行。如何正确分配给变量一个命令';谁的产量?

bash:$(…)修剪尾随的空行。如何正确分配给变量一个命令';谁的产量?,bash,command,output,newline,trim,Bash,Command,Output,Newline,Trim,[上下文] 例1: 我明白了: 0 例2: 我明白了: 六, [问题/问题] 我需要保留赋值给变量中的所有尾随空行。如何重写«Eg.1»?如果可能,给出最简单的解决方案 [解决方案] 我接受rici答案的变体2 to() { local to=${1}; IFS= read -rd '' ${to}; printf -v ${to} "${!to%$'\n'}"; }; … # a="$(echo $'\n\n\n\n\n')"; # wrong to a &l

[上下文]

例1:

我明白了: 0

例2:

我明白了: 六,

[问题/问题]

我需要保留赋值给变量中的所有尾随空行。如何重写«Eg.1»?如果可能,给出最简单的解决方案

[解决方案]

我接受rici答案的变体2

to() 
{
    local to=${1};

    IFS= read -rd '' ${to}; 
    printf -v ${to} "${!to%$'\n'}";
};

…
# a="$(echo $'\n\n\n\n\n')"; # wrong

to a < <(echo $'\n\n\n\n\n');
…
to()
{
本地到=${1};
IFS=读取-rd'${to};
printf-v${to}“${!to%$'\n'}”;
};
…
#a=“$(echo$”\n\n\n\n')”;#错误的

对于a<,有两种解决方案可用于任意命令:

1) 在末尾添加额外字符,然后将其删除:

$ a="$(printf '\n\n\n\n\n'; echo _)"; a="${a%?}"; echo ${#a}
5
2) 使用
读取

$ IFS= read -rd '' a < <(printf '\n\n\n\n\n'); echo ${#a}
5

$IFS=read-rd''a<我看到的是输出“0”,而不是“5”。(KUbuntu 13.10)@ChapaikinVA:那是和我一样的发行版,是从终端剪切粘贴而成的。(使用Bash4.3,但这不会有任何区别)我的bash:GNUBash,4.2.45(1)-发行版(i686 pc linux GNU)。+1是答案的第二部分。这应该适用于OP.@ChapaikinVA:它在两个bash版本上都可以工作,所以我不知道您是如何将它设置为echo 0的。但这主要是一个玩笑。我会把它从答案中删除一点。@chepner这是类似的,但不是重复的imho。正如我即将回答的,最好使用
mapfile
到一个数组中来跟踪单独的行<代码>映射文件a<
# aVariable="$(some_command arg_1 … arg_n)"; # wrong assignment
to aVariable < <(some_command arg_1 … arg_n);
$ a="$(printf '\n\n\n\n\n'; echo _)"; a="${a%?}"; echo ${#a}
5
$ IFS= read -rd '' a < <(printf '\n\n\n\n\n'); echo ${#a}
5