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ループを複雑にする改行文字は必要ありません。