シェルコマンドを直接使用すること(例:foo)と$(foo)を使用することの違いは何ですか?

シェルコマンドを直接使用すること(例:foo)と$(foo)を使用することの違いは何ですか?

コマンドを直接使用することと$(foo)を使用することの間で混乱しています。私はMacを使用しておりbrew cask(パッケージマネージャ)がインストールしたアプリケーションを一覧表示し、各アプリケーションをエコーし​​ようとしています。 2つの短いシェルスクリプトがあり、最初のスクリプトは次のとおりです。

#!/bin/bash
apps=$(brew cask list)
for app in ${apps}
do
    echo  "${app}"
done

うまくいきますが、別のものは次のとおりです。

#!/bin/bash
apps=$(brew cask list)
myecho=$(echo)
for app in ${apps}
do
    ${myecho}  "${app}"
done

これによりアプリケーション名./script2.sh: line 7: foo: command not foundが返されます。fooechoを直接使用することとエイリアスとして使用することのmyecho違いは何ですか?

答え1

このコマンドでは

myecho=$(echo)

myecho空のトークンを設定しています。だから次のコマンド

${myecho}  "${app}"

簡単に言えば"${app}"、これは明らかに「foo」です(予想されていません)。一つ作ってくれる?ニックネーム別の構文を使用してください。

alias myecho="echo"

追加資料:

答え2

エイリアスを設定していません。で実行されmyecho=$(echo)echoその出力(echoにはエコーする項目がないため何もありません)が変数に保存されますmyecho。しかし、echoのいくつかの出力は次のとおりです。

$ myecho=$(echo "Hello")
$ echo "$myecho"
Hello

そして変数はmyechoそれを保存します。


2番目のスクリプトで欲しいのは、echo変数を使って実行することだと思いますmyecho。実行方法は次のとおりです。

#!/bin/bash
apps=$(brew cask list)
myecho="echo"
for app in ${apps}
do
    ${myecho}  "${app}"
done

上記の内容はすべてエイリアスとは関係ありません。エイリアスは次のように定義されます。

alias myecho='echo'

ただし、エイリアシングを実行する行には次のものを含めないでください$

myecho "${apps}"

関連情報