空白なしでパラメータを指定してコマンドを送信するには?

空白なしでパラメータを指定してコマンドを送信するには?

Linuxで空白なしでパラメータとしてコマンドを実行する方法はありますか?

cat file.txt

次のようにする必要があります。

cat(somereplacementforthiswhitespace)file.txt

答え1

値が空白であるか、より一般的には空白を含む変数があればよいでしょう。

cat${IFS}file.txt

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

より正確には、これが機能する理由は、単語分割がどのように機能するかに関するものです。重要なのは、変数の値を置き換えた後に適用されることです。そして、単語分割は値の各文字を区切りIFS文字として扱うため、構成では、null以外の値IFSに設定されている${IFS}単語を区切ることができます。 1 文字より長い場合、IFS各文字は単語区切り記号です。連続したスペース区切り文字は単一の区切り文字として扱われるため、拡張結果はcat${IFS}file.txt2つの単語です。空白以外の区切り文字は別々に扱われます。catfile.txtIFS=',.'; cat${IFS}file.txtcatfile.txt

答え2

シェルが、または同じ中括弧拡張のようなものをサポートすると仮定して方法を見つけました(中括弧拡張はサポートされていますが、コマンドのグループ化との競合のために最初の引数cshとしてはサポートされていません)。kshbashyash -o brace-expandzsh

{cat,file.txt}

これにより、パラメータにスペースを使用する必要がなくなります。

答え3

別の方法は、変数拡張とともにIFS値を使用することです。

$ echo Hello! > file.txt

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

答え4

OPは6年前、

時間は流れます。

しかし、以前の答えがうまくいかなかった人のためにこの記事を投稿しています。

個人的に好きcat${IFS%???}file.txt{cat,*}command not found: cat file.txtno matches found: ,cat,*

とにかく私は私に合うより簡単な方法を見つけました。

cat<index.js

または、たとえば、次のようになります。

cat<*

非倫理的な方法で使用しないでください。ありがとうございます!

関連情報