bash how to read a single line or filenames with spaces solution


This happens all the time, you are reading from a textfile which has spaces eg:

datainfo 00
datainfo 11

If you do loop on it like this:
for info in `cat $file`; do
echo "info=$info"
done


It will treat datainfo and 00 as two separate lines:

info=datainfo
info=00

Obviously that's not what we want and there are many weird solutions in bash but I'll try and pick what I feel is the simplest and most practical.

My favorite solution:

The key is setting the IFS as below and changing the default delimiter from space ""to newline or \n. You can use the same code and it tells bash to understand not to see a " " space as a delimiter so only a newline is counted. In plain English this makes it so files and directories with spaces are interpreted as intended.

IFS=$(echo -en "\n\b")

for info in `cat $file`; do
echo "info=$info"
done

Solution #2
while read -r; do
line=$REPLY
id=`echo $line|cut -f 2 -d " "`
ip=`echo $line|cut -f 1 -d " "`
done < migratelist.txt


Tags:

bash, filenames, spaces, textfile, eg, datainfo, info, echo, quot, solutions, ll, simplest, ifs, default, delimiter, newline, counted, directories, interpreted, en, reply, ip, migratelist, txt,

Latest Articles

  • Linux Ubuntu Cannot Print Large Images
  • Cannot Print PDF Solution and Howto Resize
  • Linux Console Login Screen TTY Change Message
  • Apache Cannot Start Listening Already on 0.0.0.0
  • MySQL Bash Query to pipe input directly without using heredoc trick
  • CentOS 6 and 7 / RHEL Persistent DHCP Solution
  • Debian Ubuntu Mint rc-local service startup error solution rc-local.service: Failed at step EXEC spawning /etc/rc.local: Exec format error
  • MySQL Cheatsheet Guide and Tutorial
  • bash script kill whois or other command that is running for too long
  • Linux tftp listens on all interfaces and IPs by DEFAULT Security Risk Hole Solution
  • python import docx error
  • Cisco Unified Communications Manager Express Cheatsheet CUCME CME
  • Linux Ubuntu Debian Missing privilege separation directory: /var/run/sshd
  • bash how to count the number of columns or words in a line
  • bash if statement how to test program output without assigning to variable
  • RTNETLINK answers: Network is unreachable
  • Centos 7 how to save iptables rules like Centos 6
  • nfs tuning maximum amount of connections
  • qemu-kvm error "Could not initialize SDL(No available video device) - exiting"
  • Centos 7 tftpd will not work with selinux enabled