カテゴリー
【シェルスクリプトツール作成の基本】文字列をシェルコマンドとして実行するアレコレ
※ 当ページには【広告/PR】を含む場合があります。
2024/01/04
文字列をシェルコマンドで実行するテクニック
1.sh
#!/bin/bash
script='echo HELLO!'
#👇文字列をそのまま打ち出すと自動でコマンドと判別してくれるケース
${script}
#👇[`]文字で括ってechoコマンドで文字列を標準出力で打ち出すと文字列をコマンドと判別してくれるケース
`echo ${script}`
#👇理屈は上と同じで$()を使ってechoコマンドを実行しているケース
$(echo ${script})
#👇eval関数を利用するケース
eval ${script}
$ chmod +x 1.sh
$ ./1.sh
HELLO!
HELLO!
HELLO!
HELLO!
1.sh
2.sh
#!/bin/bash
script='hoge runs a function!'
hoge() {
#👇$0以外のコマンドライン引数
echo $*
#👇コマンドラインの引数の数
echo $#
}
${script}
`echo ${script}`
$(echo ${script})
eval ${script}
$ ./2.sh
runs a function!
3
runs a function!
3
runs a function!
3
runs a function!
3
hoge
"
#!/bin/bash
script='hoge "runs a function!"'
hoge() {
echo $*
echo $#
}
${script}
`echo ${script}`
$(echo ${script})
eval ${script}
$ ./2.sh
"runs a function!"
3
"runs a function!"
3
"runs a function!"
3
runs a function!
1
eval
"
'
#!/bin/bash
script="hoge 'runs a function!'"
#👇のように\"を使っても一緒
#script="hoge \"runs a function!\""
hoge() {
echo $*
echo $#
}
${script}
`echo ${script}`
$(echo ${script})
eval ${script}
$ ./2.sh
'runs a function!'
3
'runs a function!'
3
'runs a function!'
3
runs a function!
1
eval
コマンド 引数1 引数2 ...
eval
eval
eval
#!/bin/bash
echo '========= Execute a script ========='
a="date"
aarg="--date='TZ=\"America/Los_Angeles\" 09:00 next Fri'"
a="${a} ${aarg}"
${a}
`echo ${a}`
$(echo ${a})
eval ${a}
echo '========= Execute b script ========='
b="date '+%Y-%-m-%-d'"
${b}
`echo ${b}`
$(echo ${b})
eval ${b}
echo '========= Execute c script ========='
c="date \"+%Y-%-m-%-d\""
${c}
`echo ${c}`
$(echo ${c})
eval ${c}
echo '========= Execute d script ========='
darg='+%Y %-m %-d'
d="date '${darg}'"
${d}
`echo ${d}`
$(echo ${d})
eval ${d}
echo '========= Execute e script ========='
earg='+%Y %-m %-d'
e="date \"${earg}\""
${e}
`echo ${e}`
$(echo ${e})
eval ${e}
$ ./3.sh
========= Execute a script =========
date: 余分な演算子 `next'
Try 'date --help' for more information.
date: 余分な演算子 `next'
Try 'date --help' for more information.
date: 余分な演算子 `next'
Try 'date --help' for more information.
2020年 10月 10日 土曜日 01:00:00 JST
========= Execute b script =========
date: `\'+%Y-%-m-%-d\'' は無効な日付です
date: `\'+%Y-%-m-%-d\'' は無効な日付です
date: `\'+%Y-%-m-%-d\'' は無効な日付です
2020-10-2
========= Execute c script =========
date: `"+%Y-%-m-%-d"' は無効な日付です
date: `"+%Y-%-m-%-d"' は無効な日付です
date: `"+%Y-%-m-%-d"' は無効な日付です
2020-10-2
========= Execute d script =========
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
2020 10 2
========= Execute e script =========
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
date: 余分な演算子 `%-m'
Try 'date --help' for more information.
2020 10 2
eval
まとめ
eval
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー