次のコマンドを実行しようとすると:
for x in $(seq 10); do echo $($x >> c.txt); done
次のエラーが発生します。
-bash: 1: command not found
答え1
これを確認した後にシェルが行うことは、echo $($x >> c.txt)
コマンド置換を最初に処理することです$($x >> c.txt)
。これはコマンドの出力に置き換えられます$x >> c.txt
。これはループの最初の反復$x
で1
、対応するコマンドがないため、エラーが発生します。 (1〜10の範囲の整数に対応するコマンドがないと、ループを繰り返すたびにエラーが発生します。出力の問題が切り捨てられる可能性があります)
次のようなことをしたいかもしれません。
for x in $(seq 10); do
echo "$x" >>c.txt
done
(コマンドの代用なし)または単に
seq 10 >>c.txt
これは同じ効果があります。
答え2
ループを初めて実行するときはx
will なので、1
実行するとecho $(1 >> c.txt)
シェルは実行しようとし1
ますが、見つかりません。
実際にやりたいことを追加すると、何を変えるべきかを指摘できます。
答え3
あなたのbash定義がスクリプトで正しく定義されていないようです。
出力:
-bash: 1: コマンドが見つかりません。
通常、これはbash定義が正しく作成されていないことを意味します。スクリプトの最初の行が次のように定義されていることを確認してください。
#!/bin/bash
Bashが別の場所にある場合は、次のように見つけることもできます。
which bash