web-dev-qa-db-ja.com

スペースを含まない引数を指定してコマンドを送信する方法は?

空白なしでLinuxで引数付きのコマンドを実行する方法はありますか?

cat file.txt

する必要があります:

cat(somereplacementforthiswhitespace)file.txt
10
Rob

値がスペースである変数があった場合のみ…または、より一般的には、スペースが含まれています。

cat${IFS}file.txt

IFSのデフォルト値は、スペース、タブ、改行です。これらの文字はすべて空白です。 1つのスペースが必要な場合は、${IFS%??}を使用できます。

より正確には、これが機能する理由は、Word分割がどのように機能するかに関係しています。重要なのは、変数の値を代入した後に適用されることです。また、単語分割ではIFSの値の各文字を区切り文字として扱うため、IFSが空でない値に設定されている限り、${IFS}は単語を区切ります。 IFSが複数の文字である場合、各文字は単語の区切り文字です。空白である連続する区切り文字は単一の区切り文字として扱われるため、cat${IFS}file.txtの展開結果はcatfile.txtの2つの単語になります。空白以外の区切り文字は個別に扱われ、IFS=',.'; cat${IFS}file.txtcatは空の引数とfile.txtの2つの引数を受け取ります。

cshkshyash -o brace-expandなどのbashのようなブレース展開をサポートするシェルを想定する方法を見つけました(zshはブレース展開をサポートし、ただし、コマンドのグループ化と競合するため、最初の引数とは異なります)。

{cat,file.txt}

この方法では、引数で空白を使用する必要はありません。

7
Rob

1つの代替方法は、変数の展開でIFSの値を使用することです。

$ echo Hello! > file.txt

$ IFS=:
$ a=cat:file.txt
$ $a
Hello!
3
Isaac