簡體   English   中英

什么是POSIX shell相當於bash <<<

[英]What is the POSIX shell equivalent of bash <<<

我有一個看起來像這樣的變量:

msg="newton apple tree"

我想將每個單詞分配到單獨的變量中。 這在bash中很容易做到:

read a b c <<< $msg

在POSIX shell中是否有一種緊湊,可讀的方法?

這里的字符串只是這里單行文檔的語法糖:

$ msg="foo * bar"
$ read a b c <<EOF
> $msg
> EOF
$ echo "$a"
foo
$ echo "$b"
*
$ echo "$c"
bar

要編寫慣用腳本,您不能只查看每個單獨的語法元素並嘗試查找POSIX等效項。 這就像通過用字典中的條目替換每個單詞來翻譯文本。

將已知有三個單詞的字符串拆分為三個參數的POSIX方法,類似但與read不完全相同:

var="newton apple tree"

set -f
set -- $var
set +f
a=$1 b=$2 c=$3

echo "$a was hit by an $b under a $c"

它並不漂亮,但作為通用解決方案,您可以使用命名管道來解決這個問題。

來自BashFAQ#24

mkfifo mypipe
printf '%s\n' "$msg" >mypipe &
read -r a b c <mypipe

printfecho更可靠/更好地指定; 如果您的消息只包含-E-n ,則回顯行為會因實現而異。


也就是說,對於你在這里做的事情,你可以使用參數擴展:

a=${msg%% *}; msg=${msg#* }
b=${msg%% *}; msg=${msg#* }
c=${msg%% *}; msg=${msg#* }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM