回答:
使用するだけecho
です...展開したいコマンドの前に置きます。これはかなり頻繁に使用します。
$ ls
one.txt
two.txt
three.dat
$ echo rm *.txt
rm one.txt two.txt
$ rm *.txt
HomeおよびDelを使用して、上記のをすばやく追加/削除できますecho
。
EDIT
ように指摘し(それがある場合のように、コマンドが単純なコマンドでない場合は、コメントでは、これは動作しませんfor
ループ、パイプを使用し|
、または&&
またはそのような何か)。
echo cat * | someprogram
ますが、この答えからあなたが考えるかもしれないことはしません。
を使用できますset -x
。
たとえば、スクリプトを考えてみましょう。
$ cat script.sh
set -x
echo *
実行すると、echo
実際に実行する前に展開されたステートメントが表示されます。
$ bash script.sh
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh
また、Kundorが指摘しているように、これはコマンドラインでも対話的に機能します。
$ set -x
+ set -x
$ echo *
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh
man bash
次のことを説明set -x
します。
コマンド、ケースコマンド、選択コマンド、またはコマンドの算術演算の各単純なコマンドを展開した後、PS4の展開値を表示し、その後にコマンドとその展開引数または関連する単語リストを表示します。
のデフォルト値PS4
は、上記のように、プラス記号とそれに続くスペースです。
対話型シェルの場合は、プレスCtrl+x
に続いて*
拡大しているのglobパターンを使用して、コマンドラインを編集しますグロブパターンを入力した後。bashのmanページから:
glob-expand-word(
C-x *
)ポイントの前の単語はパス名展開のパターンとして扱われ、一致するファイル名のリストが挿入されて、単語が置き換えられます。数値引数が指定されている場合、パス名展開の前にアスタリスクが追加されます。
glob-list-expansions(Ctrl+x
、g
)にも興味があるかもしれません。
Ctrl+x, *
入力後すぐに押しましたかecho *
、Enterキーを押す前に?それでも動作しない場合は、~/.inputrc
glob-expand-wordを変更して別のものにバインドできます。
Ctrl+x
てからを押しShift+8
ます。動作する場合は試してみるCtrl+x, g
か、先ほど言ったように、.inputrc
ファイルに独自のキーを割り当てます。
引数がどのように展開またはトークン化されるかを確認する場合は、引数を出力するプログラムまたはスクリプトを使用できます。以下に1つの実装を示しbash
ます。
#!/bin/bash
for (( i = 0; i <= $#; ++i )); do
printf 'argv[%d] = %s\n' $i "${!i}"
done
というファイルにそれを入れてprintargs.sh
(そしてそれを実行可能にすると)、次のような出力が得られます。
$ ./printargs.sh a{1..3}b
argv[0] = ./printargs.sh
argv[1] = a1b
argv[2] = a2b
argv[3] = a3b