私のコードには次の行があります。
output=$(sed 's/\/$//g' <<< $output)
操作はされますが、#!/bin/bash
動作しません#!/bin/sh
。sh
プログラム終了時にエラーラインを分析した結果、これが問題となる部分Syntax error: redirection unexpected
という結論に達しました。<<<
また、vimでは、vimは下のコードが<<<
文字列内にあるかのように灰色で表示します。なぜこれが起こるのか知りたいです。事前にありがとう
ベストアンサー1
はい<<<
、zsh演算子は他のいくつかのシェル(ZSHを含む)でサポートされていますが、まだ言語の標準仕様に追加されておらず、一部のbash
実装ではまだサポートされていません。sh
sh
変数の内容から末尾を削除するには/
:
output=${output%/}
代わりに、このコードのように¹/
の各行の末尾から削除するには、次のようにします。$output
zsh
output=$(printf '%s\n' "$output" | sed 's|/$||')
あるいは、zshのhere-stringの代わりに標準のhere-docを使用してください。
output=$(
sed 's|/$||' << EOF
$output
EOF
)
サポートされるシェルは<<<
次のとおりです。
zsh
、1991年から- 1991年の時点で、Byron Rakitzisの
rc
Unixクローン(追加の改行文字を追加しなかったにもかかわらず)および派生製品(es
、、akanga
) ksh93
、2002年からbash
、2002年からmksh
、2008年からyash
、2009年以降(呼び出し時ではないsh
)
sh
2020年5月現在、これをサポートしていない実装には、Bourneシェルksh88
とそのash
派生物(busybox、FreeBSD、NetBSD dash
)、OpenBSDが含まれます。sh
pdksh
posh
sh
bosh
1およびすべての末尾の改行(追加された改行printf
およびある場合の改行$output
)は、コマンド置換の副作用として結果に含まれます。たとえば、(完全に有効なファイルパス)の場合$output
。$'///\n/\n/'
//