回答:
そして、あなたが使用することができます{} start..end..stepブレース展開フォームを:bash
zsh
ksh93
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
すべてのシェルおよびseqを持つシステムに移植可能(この質問にはタグが付けられているため)
startが1の場合:
$ echo $(seq 10)
1 2 3 4 5 6 7 8 9 10
さもないと:
$ echo $(seq 5 10)
5 6 7 8 9 10
bcを使用:
$ echo $(echo "for (i=0;i<=1000;i++) i"| bc)
バッシュ
echo {1..10}
このエコーソリューションは、IFSの値に改行が含まれている場合に機能します。改行はデフォルトで含まれています。
デフォルトでは、IFSはシーケンス<space> <tab> <newline>に設定されます。そして、シェルのクリーンスタートごとにリセットされます。ただし、極端な場合に変更される可能性があるという懸念がある場合は、いくつかの解決策があります。
bash、zsh、kshでは、IFS = $ '\ t \ n'を使用します(この回答の残りの部分はすべてスキップします)。
ただし、shでIFSの値をリセットするのは複雑な場合があります。詳細についてはこちらをご覧ください。
$ unset IFS; echo $(seq 5 10) #Always work.
常に機能します。IFSを設定する必要がある以下のコード(または子スクリプト)が存在しないことを条件としOldIFS="$IFS"
ます。
shのトリックの使用:
sh -c 'IFS="$(printf " \t\nx")"; IFS="${IFS%x}"; printf "$IFS"|xxd' # correct.
IFS='<space><tab><newline>'
これらの、、が対応するリテラル文字である<space>
場合<tab>
、単純に実行できることに注意してください<newline>
。
seq 10 |xargs
...または...
seq 10 |paste -s -
上記の両方のコマンドは、整数を空白で区切ります。xargs
デフォルトは模倣/bin/echo
であるため、各整数は単一のスペースで区切られます。ただし、コマンドラインの最大長は128Kにデフォルト設定されます。これを調整できます...
seq 100000 | xargs -s2093009 | wc -l
... prints 1. -s
ここの値はarbitrary意的ではありません-より高い値を試してみたところ(どうやらうまくいったようですが)、後でxargs
役に立つメッセージを出力しました:
-s value should be <2093010
paste
は、任意の長さの行を処理するための2つの(私の知る限り) POSIX認定ユーティリティの1つです。
ほとんどの標準ユーティリティはテキストファイルで機能します。この
cut
ユーティリティを使用すると、任意の行長のファイルを同じデータを含むテキストファイルのセットに変換できます。このpaste
ユーティリティを使用して、任意の行長のファイルを作成(または再作成)できます。0個以上の行に編成された文字を含むファイル。行にはNUL文字は含まれず
{LINE_MAX}
、\n
ewline文字を含む長さのバイトを超えることはできません。POSIX.1-2008はテキストファイルとバイナリファイルを区別しませんが(ISO C標準を参照)、多くのユーティリティは、テキストファイルを操作するときに予測可能または意味のある出力のみを生成します。このような制限がある標準ユーティリティは、常にSTDINまたはINPUT FILESセクションでテキストファイルを指定します。
paste
デフォルトはタブ区切り文字であるため、2番目のコマンドに続く各整数の間にタブがあります。あなたはできる...
seq 10 |paste -sd ' ' -
... -d
その動作を変更するには、elimiterスイッチを使用し、
seq 10 | xargs
は正常に動作しますが、コマンドラインの制限のため、seq 100000 | xargs
5つの\n
区切り行を出力します(私のシステム上)
paste and
は、任意の長さの行を操作するための2つのPOSIX公認ユーティリティです。とxargs | xargs
はいえ、オプションです。または、seq 100000|tr \\n \
$IFS
数字に設定してみませんか?そして、でbash
そのgodawful遅いとにかく。あなたの答えであなたが話すsh
-あなたは$IFS
そのコンテキストで設定する必要さえありません-それがそこに設定されている場合、環境を介して渡されます。そして、seq 100000|paste -s
パフォーマンスの面で5:1に勝るほど短くはありません。そしてpaste
、何の落とし穴もありません。
$IFS
-私はいつもそれを使用します-しかし、私はそれを設定し、あなたもそうするべきでない限り、それを使用しません。特に、あなたはそれを行うべきより良い方法を知らない見知らぬ人をランダムに推薦するべきではありません。それを偶然に任せないでください-それはコンピュータプログラムです。それが予期しない動作をする場合、それはバグです。
echo $(seq 1 10)