以下を使用してテストするURLのリストを作成しました。
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
残念ながら、追加されたすべてのURLurls.txt
の前にスペースが続きます(もちろん、最初のURLは除く)。なぜこのようなことが起きるのか理解してパイピングで剥がすことができるのも分かるが、sed
抑制する方法があるのだろうか。 (これは愚かで賢いように思えるかもしれませんが、多くの人が好むものと変わりはありません。「猫の虐待」ではありません.)
頑張った単語の分離を抑制する二重引用符ただし、これはサポートの拡張も妨げるため、機能しません。
IFSを空の文字列に変更しようとしましたが、うまくいきませんでした。
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
また改行に変更せず:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
答え1
printf
組み込みの機能を使用してください。
$ printf %s\\n localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}
localhost:8080/reports/promos/130
localhost:8080/reports/promos/130.pdf
localhost:8080/reports/promos/130.xls
localhost:8080/reports/promos/130.xlsx
localhost:8080/reports/promos/130.csv
localhost:8080/reports/promos/130.preload
localhost:8080/reports/promos/130-unburdened
localhost:8080/reports/promos/130-unburdened.pdf
localhost:8080/reports/promos/130-unburdened.xls
localhost:8080/reports/promos/130-unburdened.xlsx
localhost:8080/reports/promos/130-unburdened.csv
localhost:8080/reports/promos/130-unburdened.preload
....
答え2
中かっこ拡張を配列に保存してから、任意の方法で出力できます。
urls=( localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload} )
それから
printf "%s\n" "${urls[@]}"
または
(IFS=$'\n'; echo "${urls[*]}")
エコの例は、次の理由で奇妙に見えます。
- サブシェル(括弧)で実行されるため、IFSの現在の値は変更されません。
- IFSは別々のコマンドで定義する必要があります。
- これはうまくいきません。
IFS=$'\n' echo "${urls[*]}"
これは、新しい環境変数が適用される前に変数が拡張されるためです。 - IFSを設定する必要があります。今後変数の拡張を開始します。
- これはうまくいきません。
また、使用された逆参照配列インデックスの微妙な違いに注意してください。
[@]
printfの例では、配列を単一の単語に展開する[*]
エコーの例では、配列を単一の単語に拡張し、要素はIFSの最初の文字に分けられます。
答え3
これはzshタグ付きであるため、zsh組み込み機能を使用することをお勧めしますprint
。
print -l localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}
-l
別の行にパラメータを印刷します。
答え4
問題は、中括弧拡張が空白を追加するのに対し、echoは改行を追加することです。したがって、単一の責任原則を使用し、改行文字を別々に処理します。
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload} | tr " " "\n"