[解決済み] 変数に格納されたコマンドを実行するにはどうすればよいですか?
2023-05-27 20:27:27
質問
変数に格納されたコマンドを呼び出す正しい方法は何ですか?
1と2の違いは何ですか?
#!/bin/sh
cmd="ls -la $APPROOTDIR | grep exception"
#1
$cmd
#2
eval "$cmd"
どのように解決するのですか?
Unix シェルは、実行する前に入力の各行に対して一連の変換を行います。 ほとんどのシェルでは、次のようなものです (以下のドキュメントから引用されています。 Bash マニュアルページ ):
- 初期単語分割
- ブレース展開
- チルダ展開
- パラメータ、変数、算術演算の展開
- コマンド置換
- 二次単語分割
- パス展開 (別名グロビング)
- 引用符除去
使用方法
$cmd
を直接使うと、パラメータ展開の段階であなたのコマンドに置き換えられ、その後のすべての変換を受けます。
使用方法
eval "$cmd"
は引用除去の段階まで何もしません。
$cmd
はそのまま返され、パラメータとして
eval
へのパラメータとして渡されます。
つまり、基本的にはほとんどの場合同じで、コマンドがパラメータ展開までの変換ステップを使用する場合に異なります。 たとえば、ブレース展開を使用する場合です。
$ cmd="echo foo{bar,baz}"
$ $cmd
foo{bar,baz}
$ eval "$cmd"
foobar foobaz
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み] シェルコマンドを実行しながらエコーする方法
-
[解決済み] grep --exclude/--include構文を使って特定のファイルをgrepしないようにする
-
[解決済み] 魚貝類でPATHを変更する【終了しました
-
[解決済み] 行全体がマッチする場合のみ grep がマッチするようにするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シェルからErlangのリリースバージョン番号を取得する方法は?
-
[解決済み] grep --includeオプションを複数のファイルタイプに使用するにはどうすればよいですか?
-
[解決済み] Cygwinからファイルを開く
-
[解決済み] シェルパイプでエラーコードをキャッチする
-
[解決済み] バッチファイル - コマンドライン引数の数
-
[解決済み] リポジトリ 'http://security.debian.org/debian-security buster/updates InRelease' の 'Suite' の値が 'stable' から 'oldstable' に変更されました [閉鎖] 。
-
[解決済み] Makefile でスクリプトをソースにするには?
-
[解決済み] シェルスクリプトのグローバル環境変数
-
[解決済み] Error: EACCES: アクセス '/usr/lib/node_modules' はパーミッションが拒否されました。
-
[解決済み] GNU make はスペースを含むファイル名を扱えますか?