shell中でコマンド起動には、引用符『’』ではなく、バッククォート『`』

シェアする

Pocket

1.ある日の会話

今日ですね、60爺は師匠の50オヤジと話をしていた中で、「shellの変数名と言うか、shellの中で変数を扱うところがいつもエラーになってしまって動かない」ことを話しました。

さすが師匠です。回答をくれました。

50「変数を囲う文字に何を使っています?ひょっとして、『’』(引用符)(shift+7)じゃないですよね?」
60「そうに決まってんじゃん」
50「やっぱり、やだな、『`』バッククォート(shift+@) に決まってんじゃないすか。常識ですよ、常識」
60「素人の60爺に、そんな常識は無い」(開き直り)

2.『`』バッククォート(shift+@)とは

そういう話で、『`』バッククォート(shift+@)が正しいのだそうです。

ガーーーン。皆さん知ってましたか?『`』バッククォートで囲まれた中は、コマンドの実行をするそうですよ!

知らなかった!

60爺は、こんな文字『`』バッククォートがあることさえ知らなかったです。

60爺の作るshellは、変数を扱おうとすると、いつも動かない謎が解けました。師匠には、非常識と言われましたが、これで、60爺はひとつ利口になったのです。

読み方は、以下にあるように3通りあるみたいです。

  • バッククォート
  • バックコーテーション
  • アクサングラーブ

ちなみに、『’』(shift+7)の読み方も載せておきます。

  • シングルクオーテーション
  • 引用符
  • アポストロフィ

3.早速、お試し

早速、動かなかったshellがあるので、試してみました。

スピーカテスト用のサンプルになります。

こちらは、『’』引用符(shift+7)で書いています。

pi@raspberrypi:~ $ cat sample_web_aplay.sh
#! /bin/sh
# Directry set
d=/usr/share/sounds/alsa
# /usr/share/sounds/alsa
# all file loop
for f in 'ls ${d}' ; do
# aplay command odio file
aplay "$d/$f"
# 1 secont sleep
sleep 1
done

このため、実行すると、当然、エラーとなります。

pi@raspberrypi:~ $ sudo sh ./sample_web_aplay.sh
/usr/share/sounds/alsa/ls ${d}: そのようなファイルやディレクトリはありません

今日教えてもらった「バッククォート」『`』(shift+@)で書き換えました。

pi@raspberrypi:~ $ cat sample_web_aplay.sh
#! /bin/sh
# Directry set
d=/usr/share/sounds/alsa
# /usr/share/sounds/alsa
# all file loop
for f in `ls ${d}` ; do
# aplay command odio file
aplay "$d/$f"
# 1 secont sleep
sleep 1
done

実行すると、ちゃんと、wavファイル全てを鳴らしてくれました。すばらしい。

pi@raspberrypi:~ $ sudo sh ./sample_web_aplay.sh
再生中 WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Front_Left.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Front_Right.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Noise.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Rear_Center.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Rear_Left.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Rear_Right.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Side_Left.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
再生中 WAVE '/usr/share/sounds/alsa/Side_Right.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
pi@raspberrypi:~ $

指定のディレクトリの中身を出しておきますね。

pi@raspberrypi:~ $ cd /usr/share/sounds/alsa/
pi@raspberrypi:/usr/share/sounds/alsa $ ls
Front_Center.wav Noise.wav Rear_Right.wav
Front_Left.wav Rear_Center.wav Side_Left.wav
Front_Right.wav Rear_Left.wav Side_Right.wav

まだまだ、知らないことのある Linux の世界。何かわかったら、また報告します。

スポンサーリンク

シェアする

フォローする