Bash

用標準輸入替換變數?

  • December 12, 2018

我想循環一些值,我知道我可以簡單地使用 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

如果變數要在命令後保持其值。

<<<是一個字元串重定向。它將單個字元串重定向到命令或實用程序。在這裡,我們使用它將數字發送到 subshel​​l 或複合命令。此復合命令讀取該值,然後將其列印為字元串的一部分。

您不能使用,因為它會<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 腳本中,您不想編寫顯式循環循環由那些一次處理一行或一次處理一個參數的文本實用程序完成。

引用自:https://unix.stackexchange.com/questions/487521