trコマンドは$()で使用され、変数に保存されても効果はありません。

trコマンドは$()で使用され、変数に保存されても効果はありません。

CLIで実行している場合:

curl time.com | sed -n 's/.*href="\([^"]*\).*/\1/p' | tr " " "\n"

次に、期待どおりにページからのリンクのリストを新しいSTDOUT行に1つずつインポートします。

ただし、変数に保存して次のようechoに動作しようとすると、次のようになりますscript.sh

PAGE_LINKS=$(curl time.com | sed -n 's/.*href="\([^"]*\).*/\1/p' | tr " " "\n")
echo $PAGE_LINKS

すべてのリンクをスペースで区切って1行に配置しました。無視されるのと同じですtr

私は次のようなものを含むいくつかのアプローチを試しました。

HREFS=$(tr " " "\n" < "{PAGE_LINKS}")
echo $HREFS

ところでfile too longエラーが発生しました。どんな提案がありますか?

ベストアンサー1

設定bashのマニュアルページによると$(command)

Bash はコマンドを実行し、コマンド置換をコマンドの標準出力に置き換え、末尾の改行を削除して拡張を実行します。埋め込まれた改行文字は削除されませんが、単語の分離中に削除される可能性があります。

したがって、tr問題ではありませんが、bash単語の分離中に末尾の改行を削除し、他の改行を削除することです。これは文書化された動作です。

私はほとんどの場所でこの動作をしたいと確信しています。ファイル名のリストを含むファイルがある場合:

for FILENAME in $(cat somefile)
do
     ...
done

ファイル名のリストを繰り返します。somefileファイル名として使用される単語のリストや、for-do-doneループを複雑にする改行文字は必要ありません。

おすすめ記事