Linuxで空白なしでパラメータとしてコマンドを実行する方法はありますか?
cat file.txt
次のようにする必要があります。
cat(somereplacementforthiswhitespace)file.txt
答え1
値が空白であるか、より一般的には空白を含む変数があればよいでしょう。
cat${IFS}file.txt
デフォルトはIFS
空白、タブ、改行です。これらの文字はすべて空白です。単一のスペースが必要な場合に使用できます${IFS%??}
。
より正確には、これが機能する理由は、単語分割がどのように機能するかに関するものです。重要なのは、変数の値を置き換えた後に適用されることです。そして、単語分割は値の各文字を区切りIFS
文字として扱うため、構成では、null以外の値IFS
に設定されている${IFS}
単語を区切ることができます。 1 文字より長い場合、IFS
各文字は単語区切り記号です。連続したスペース区切り文字は単一の区切り文字として扱われるため、拡張結果はcat${IFS}file.txt
2つの単語です。空白以外の区切り文字は別々に扱われます。cat
file.txt
IFS=',.'; cat${IFS}file.txt
cat
file.txt
答え2
シェルが、または同じ中括弧拡張のようなものをサポートすると仮定して方法を見つけました(中括弧拡張はサポートされていますが、コマンドのグループ化との競合のために最初の引数csh
としてはサポートされていません)。ksh
bash
yash -o brace-expand
zsh
{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.txt
no matches found: ,cat,*
とにかく私は私に合うより簡単な方法を見つけました。
cat<index.js
または、たとえば、次のようになります。
cat<*
非倫理的な方法で使用しないでください。ありがとうございます!