为简单起见,我想做:
echo cart | assign spo;
echo $spo
Run Code Online (Sandbox Code Playgroud)
输出:购物车
是否assign
存在这样的应用程序?
我知道使用替换来做到这一点的所有方法。
Bru*_*ger 18
你可以做这样的事情,如果你使用bash
:
echo cart | while read spo; do echo $spo; done
Run Code Online (Sandbox Code Playgroud)
不幸的是,变量“spo”不会存在于 while-do-done 循环之外。如果您可以在 while 循环中完成您想做的事情,那就行了。
实际上,您几乎可以在 ATT ksh(不是在 pdksh 或 mksh 中)或在神话般的 zsh 中执行上面写的几乎完全相同的操作:
% echo cart | read spo
% echo $spo
cart
Run Code Online (Sandbox Code Playgroud)
因此,另一种解决方案是使用 ksh 或 zsh。
Sté*_*las 12
echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }
Run Code Online (Sandbox Code Playgroud)
只要只输出echo
一行,就可以工作(将没有尾随换行符的输出存储到spo
变量中)echo
。
你总是可以这样做:
assign() {
eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)
Run Code Online (Sandbox Code Playgroud)
以下解决方案适用于bash
脚本,但不适用于bash
提示符:
shopt -s lastpipe
echo cat | assign spo
Run Code Online (Sandbox Code Playgroud)
或者:
shopt -s lastpipe
whatever | IFS= read -rd '' spo
Run Code Online (Sandbox Code Playgroud)
要存储的输出whatever
上升到第NULL字符(bash
变量不能存放反正NULL字符)的$spo
。
或者:
shopt -s lastpipe
whatever | readarray -t spo
Run Code Online (Sandbox Code Playgroud)
将 的输出存储whatever
在$spo
数组中(每个数组元素一行)。