クイズ: Bash & Shell マスター
コンピュータとちゃんと話せますか?
この16問のクイズでBashスクリプトスキルをテストしてみましょう!
変数、ループ、条件分岐、文字列操作、関数、そして基本からやや複雑な構文の落とし穴までをカバーします。
シェルスクリプトのスキルを磨く(または証明する)!
「It’s 🔨 Time!」を出力するコマンドはどれですか?
クォートのエスケープは本当にややこしいですよね。Bash文字列内で他の言語をエスケープする想像してみてください。クォートやアポストロフ、$記号が邪魔になります。🫠
シングルクォート内ではシングルクォートを直接エスケープできません。一度クォートを閉じ、外側でエスケープした引用符を挿入してから、クォートを開き直します。'\''というクォート→エスケープ→クォートのシーケンスで出力できます:
It's 🔨 Time!他の方法もありますが、これは最も一般的な方法です。
このコマンドは何を出力しますか?
echo c{a,b}t大括弧{}による拡張は、コンマ区切りの値やパターンごとに、文字列コンテキストの複数バージョンを生成します。
ここではc{a,b}tは次のように展開されます:
cat cbtここでは何が起こっている?
str="Bark bark"echo ${str/bark/meow}${var/pattern/replacement} 構文は、pattern の最初の出現を replacement で置換します。ここでの出力は:
Bark meowこれは大文字小文字を区別します。bark と Bark の両方を処理するには、${var/[Bb]ark/Bark} のようなパターンを使用するか、置換前に文字列を正規化してください。
すべての出現を置換するには ${var//pattern/replacement} を、
文字列の先頭から置換するには ${var/#pattern/replacement} を、
文字列の末尾から置換するには ${var/%pattern/replacement} を使用します。
ファイルcats.txtが存在する場合、このスクリプトは何を出力しますか?
if [ -e cats.txt]; then echo "File exists"else echo "File does not exist"fi閉じ括弧の前のスペースが不足していることに気づけましたか?
Bashはここでは非常に敏感です: 括弧内にスペースが必要です。
スペースの不足により[コマンドが閉じ ]を見逃し、Bashは診断メッセージを表示し、テストを失敗扱いにしてelseブランチに進みます。
正しい構文は次の通りです:
if [ -e example.txt ]; then echo "File exists"else echo "File does not exist"fi注: 条件式には**二重括弧[[ ]]**の使用を推奨します。BashFAQを参照してください。
どのオプションがコマンド ls -l を実行して出力を返しますか?
$(ls -l) の構文は括弧内のコマンドを実行し、出力を置換します。例えば:
echo "Today is $(date +%F)"# => Today is 2029-12-311番目のオプションはシングルクォート ' を使用しています。これは展開を防ぎ、'$(date +%F)' は単に文字列 $(date +%F) を出力します。
バッククォート(`ls -l`)によるコマンド実行は依然サポートされていますが、最近は一部の文脈ではアンチパターンとされています。より読みやすく、シェルのバージョンや種類に一貫性を持たせるために $(command) の使用が推奨されます。
中括弧 ${} は変数展開用で、コマンド置換には使われません。
% 文字はコマンド置換には使用されません。
エラー出力を標準出力に結合するためには、どの演算子を使用しますか?
2>&1 演算子は、標準エラー出力(ファイル記述子2)を標準出力(ファイル記述子1)にリダイレクトします。これは、通常の出力と同じストリームにエラーメッセージをキャプチャするのに役立ちます。
詳しくはリダイレクトFAQを参照してください。表現の改善を提案してくれたu/OneTurnMoreに感謝します。
私のBashクイズで混乱しましたか?
コメントで教えてください!
補足資料
Bashスキルをブラッシュアップするための以下のリソースをご覧ください:
- Bashガイド
- BashFAQ
- ShellCheck
- Bashアカデミー
- Bashスクリプティングチュートリアル
- Bashリファレンスマニュアル
- Bashハッカーズウィキ
- Bash初心者向けガイド
- Bashリファレンスカード
