GNU/Linux >> Belajar Linux >  >> Linux

gema karakter baris baru tidak berfungsi di bash

Sejarah campuran echo berarti operasi defaultnya bervariasi dari shell ke shell. POSIX menentukan bahwa hasil dari echo adalah "implementasi-ditentukan" jika argumen pertama adalah -n atau argumen apa pun yang berisi garis miring terbalik.

Lebih dapat diandalkan untuk menggunakan printf (baik sebagai perintah bawaan atau perintah eksternal) yang perilakunya didefinisikan dengan lebih baik:tanda garis miring terbalik gaya C dan penentu format didukung dalam string format (argumen pertama).

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

Anda dapat mengontrol perluasan urutan escape backslash dari bash echo perintah bawaan dengan xpg_echo opsi shell.

Letakkan di bagian atas bash apa pun skrip untuk membuat echo memperluas tanda garis miring terbalik secara otomatis tanpa harus menambahkan -e untuk setiap perintah gema.

shopt -s xpg_echo
echo 'foo\nbar'

Praktik yang disarankan adalah menggunakan printf untuk semua skrip baru.

printf '%s\n%s\n' "Hello" "World"

printf '%s\n' "Hello\nWorld"

Saat Anda menggunakan bash myfile.sh , Bash dijalankan dalam mode "batch", pada terpisah proses, dan tidak baca profil atau rcfile-nya.

Saat Anda menggunakan . myfile.sh , file tersebut bersumber oleh proses shell saat ini (seolah-olah isinya diketik oleh Anda), oleh karena itu ia melihat alias yang Anda tetapkan saat ini.

Secara umum, adalah Ide yang Sangat Buruk untuk menulis skrip yang bergantung pada konfigurasi shell tertentu, terutama alias, kecuali jika Anda mendefinisikannya dalam skrip diri. (Tidak pernah mengandalkan .bashrc pengguna , bahkan jika itu milik Anda sendiri.)


Linux
  1. Melampirkan Vs. Tidak Melampirkan Nilai Variabel Dalam Kutipan Di Bash?

  2. Array di Bash Tidak Ditemukan

  3. jp tidak berfungsi

  1. fflush() tidak berfungsi di Linux

  2. Perintah Linux 'akan' tidak berfungsi

  3. Perintah Conda bekerja di command prompt tetapi tidak di skrip bash

  1. Mengapa Printf Lebih Baik Dari Echo?

  2. Melarikan diri dari karakter bintang (*) di bash

  3. sed e dan g flag tidak bekerja bersama