Bash
用標準輸入替換變數?
我想循環一些值,我知道我可以簡單地使用 for 循環,但是有沒有其他方法可以在命令末尾替換命令中的變數值?
有點像
echo 11"$p" < 8 #toprint 118
echo 11"$p" < 9 #toprint 119
echo 11"$p" < a #toprint 11a
我希望能夠用我的值替換某些變數,但在命令結束時。我知道有多種方法可以做到這一點,所以我不要求其他方法。
( read p && echo "11$p" ) <<<8
或者
{ read p && echo "11$p"; } <<<8
如果變數要在命令後保持其值。
這
<<<
是一個字元串重定向。它將單個字元串重定向到命令或實用程序。在這裡,我們使用它將數字發送到 subshell 或複合命令。此復合命令讀取該值,然後將其列印為字元串的一部分。您不能使用,因為它會
<8
嘗試從名為8
.
如果您的值在數組中,則無需循環它們,只需執行以下操作:
values=(8 9 a) printf '11%s\n' "${values[@]}"
如果它們在不同的變數中,則相同:
a=8 b=9 c=a printf '11%s\n' "$a" "$b" "$c"
如果輸入來自標準輸入,您可以使用
xargs
:xargs printf '11%s\n' << EOF 8 "9" 'a' EOF
(上面顯示了 支持的不同類型的引用或參數分隔符
xargs
)。或者使用類似的東西:
sed 's/^/11/' << EOF 8 9 a EOF
或者
awk '{print "11" $0}' << EOF 8 9 a EOF
通常,在 shell 腳本中,您不想編寫顯式循環。循環由那些一次處理一行或一次處理一個參數的文本實用程序完成。