bash:$(…)修剪尾随的空行。如何正确分配给变量一个命令';谁的产量?
[上下文] 例1: 我明白了: 0 例2: 我明白了: 六, [问题/问题] 我需要保留赋值给变量中的所有尾随空行。如何重写«Eg.1»?如果可能,给出最简单的解决方案 [解决方案] 我接受rici答案的变体2bash:$(…)修剪尾随的空行。如何正确分配给变量一个命令';谁的产量?,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
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