空白なしでLinuxで引数付きのコマンドを実行する方法はありますか?
cat file.txt
する必要があります:
cat(somereplacementforthiswhitespace)file.txt
値がスペースである変数があった場合のみ…または、より一般的には、スペースが含まれています。
cat${IFS}file.txt
IFS
のデフォルト値は、スペース、タブ、改行です。これらの文字はすべて空白です。 1つのスペースが必要な場合は、${IFS%??}
を使用できます。
より正確には、これが機能する理由は、Word分割がどのように機能するかに関係しています。重要なのは、変数の値を代入した後に適用されることです。また、単語分割ではIFS
の値の各文字を区切り文字として扱うため、IFS
が空でない値に設定されている限り、${IFS}
は単語を区切ります。 IFS
が複数の文字である場合、各文字は単語の区切り文字です。空白である連続する区切り文字は単一の区切り文字として扱われるため、cat${IFS}file.txt
の展開結果はcat
とfile.txt
の2つの単語になります。空白以外の区切り文字は個別に扱われ、IFS=',.'; cat${IFS}file.txt
、cat
は空の引数とfile.txt
の2つの引数を受け取ります。
csh
、ksh
、yash -o brace-expand
などのbash
のようなブレース展開をサポートするシェルを想定する方法を見つけました(zsh
はブレース展開をサポートし、ただし、コマンドのグループ化と競合するため、最初の引数とは異なります)。
{cat,file.txt}
この方法では、引数で空白を使用する必要はありません。
1つの代替方法は、変数の展開でIFSの値を使用することです。
$ echo Hello! > file.txt
$ IFS=:
$ a=cat:file.txt
$ $a
Hello!